eqns={x'[t]==-y[t]-x[t]^2,y'[t]==2x[t]-y[t]^3,x[0]==y[0]==1};
event=WhenEvent[y[t]==0,Sow[t]];
{sol1,points}=Reap@NDSolve[{eqns,event},{x,y},{t,100}];
ParametricPlot[{x[t],y[t]}/.sol1,{t,0,100},Mesh->points,MeshShading->{Green,Orange},PlotRange->All,AxesLabel->{x,y}]

event=WhenEvent[y[t]==1.1Sin[5x[t]],Sow[t]];
{sol2,points}=Reap@NDSolve[{eqns,event},{x,y},{t,100}];
Show[ParametricPlot[{x[t],y[t]}/.sol2,{t,0,100},Mesh->points,MeshShading->{Green,Orange},PlotRange->All,AxesLabel->{x,y}],ParametricPlot[{t,1.1Sin[5t]},{t,-1,1},PlotStyle->Dashed]]

Clear[p];
aleqns={p'[t]==(Sqrt[((x'[t])^2)+((y'[t])^2)]),p[0]==0};
event=WhenEvent[Mod[p[t],1]==0,Sow[t]];
{sol3,points}=Reap@NDSolve[{eqns,aleqns,event},{x,y,p},{t,100}];
ParametricPlot[{x[t],y[t]}/.sol3,{t,0,100},Mesh->points,MeshShading->{Green,Orange},PlotRange->All,AxesLabel->{x,y}]