Maybe this will help. I can adapt my answer here, using the second argument of Dynamic
to set the position of the Locator
to a point on a parametric curve. We can use FindMinimum
to find the point on the parametric curve that is closest to the mouse. To speed things up, it helps to have good initial points for FindMinimium
. To do that, we save the values of the parameter t
calculated by ParametricPlot
in the list t0
. Then Nearest
is used to find the parameter t
of the point of those calculated by ParametricPlot
that is closest to the mouse. This t
is used as the initial value for FindMinimum
. There are alternatives to using the points computed by ParametricPlot
(see below). To further speed things up, it can help to reduce the accuracy demanded of FindMinimum
. All this requires extra local variables (with no controls, specified by None
).
I put Dynamic
around LocatorPane
so that the initialization code (for plot
, nf
) would not be reevaluated, except, technically, on the first update after initial evaluation. (This extra evaluation could be eliminated by adding the Manipulate
option TrackedSymbols :> {p}
.)
f[t_] := t {Cos[10 t], Sin[10 t]};
Manipulate[
{plot, {t0}} = Reap @ ParametricPlot[f[t], {t, 0, 2}, EvaluationMonitor :> Sow[t]];
nf = Nearest[f /@ t0 -> t0];
Dynamic @ LocatorPane[
Dynamic[
p,
(p = f @ Clip[t /. Last @ FindMinimum[EuclideanDistance[f[t], #], {t, First @ nf[#]},
AccuracyGoal -> 5, PrecisionGoal -> 4],
{0, 2}]) &],
plot],
{{p, {0, 0}}, None}, {plot, None}, {t0, None}, {nf, None}
]

Alternative initial points
The easiest way is just to take equally spaced values of t
:
nf = Nearest[f /@ # -> #] &@ Range[0, 2, 0.01]; (* {0, 2} is the domain of t *)
One advantage to ParametricPlot
is that it tends to calculate more points where the curvature is great. Where the curvature is great, FindMinimum
sometimes jumps around in its solutions. In our example case, the curvature is greatest near the origin; once the number of values of t
is above about 150 or so, the behavior seems smooth. By comparison, ParametricPlot
calculates 1645 points, so in some sense this method could be considered optimal in this example case.
A second method is to take point equally spaced along the curve. This can be useful when the velocity of parametrization varies widely. However, where the curvature is tight, the same problem of FindMinimum
jumping from one part of the curve to another can occur.
arclength = NDSolveValue[{t'[s] Norm[f'[t[s]]] == 1, t[0] == 0},
t, {s, 0, NIntegrate[Norm[f'[t]], {t, 0, 2}]}]; (* {0, 2} is the domain of t *)
nf = Nearest[f /@ # -> #] &@
(arclength /@ Range @@ Flatten[{#, Differences /@ # / 200}] &@ arclength["Domain"]);
Locator
> Scope > Locator Control andLocatorPane
> Applications and could be considered off-topic. But each has complications that distinguish them from these answers and from each other. Ditto for this related question. $\endgroup$