var bend = -10; var path = document.getElementById("line-path"); var x = 10; var swing = 52; var friction = .99; function step() { x++; swing *= friction; bend = (10 * Math.sin(x/5) * swing); var px= 0,py=0; if (bend.toFixed(2) == 0) bend = 0.01; var pathData = "M 150 " + px + "C -350 40 ,0 " + bend.toFixed(3) + ", 150 " + py; path.setAttribute("d", pathData); window.requestAnimationFrame(step); } path.onclick=function(e) { var offset = e.clientX / window.innerWidth - 0.5; swing+=70; } window.requestAnimationFrame(step);