limit1=Manipulate[
f[u_,v_]=function/.x->u/.y->v;minRange=-1;maxRange=1;Show[ParametricPlot3D[Evaluate[{{x,u,f[x,u]}/.u->(Tan[k] pathType)}],{x,minRange,maxRange},PlotStyle->Thick,SphericalRegion->True],ParametricPlot3D[Evaluate[{x,y,f[x,y]}],{x,minRange,maxRange},{y,minRange,maxRange},PlotStyle->Opacity[0.8],SphericalRegion->True],PlotLabel->Row[{"Limit along path = ",Limit[f[x,u]/.u->(Tan[k] pathType),x->0]}],PlotRange->{{minRange,maxRange},{minRange,maxRange},{minRange,maxRange}}],{k,-π/2+0.01,π/2-0.01},{{function,((x y)/((x^2)+(y^2)))},{((x y)/((x^2)+(y^2))),(((x )^2)/(Sqrt[(x^2)+(y^2)])),(((x^2) y)/((x^2)+(y^2))),((x (y^2))/((x^2)+(y^4)))},ControlType->PopupMenu},{{pathType,x},{ x->Linear, (x^2)->Quadratic, (x^3)->Cubic,(Sqrt[Abs[x]])->Root},ControlType->PopupMenu},TrackedSymbols:>{k,function,pathType}]

Manipulate[Module[{f,minRange,maxRange},f[u_,v_]=function/.x->u/.y->v;
minRange=-1/(zoom^2);maxRange=1/(zoom^2);Column[{ContourPlot[f[x,y],{x,minRange,maxRange},{y,minRange,maxRange},PlotPoints->Round[Max[20,zoom/10]]],Plot3D[f[x,y],{x,minRange,maxRange},{y,minRange,maxRange},ColorFunction->Function[{x,y,z},GrayLevel[z]],SphericalRegion->True,ClippingStyle->None,PlotPoints->Round[Max[20,2zoom/10]]]}]],{{zoom,1},0.1,500},{{function,((x y)/((x^2)+(y^2)))},{((x y)/((x^2)+(y^2))),(((x )^2)/(Sqrt[(x^2)+(y^2)])),(((x^2) y)/((x^2)+(y^2))),((x (y^2))/((x^2)+(y^4)))},ControlType->PopupMenu}]