I'm using WebGL's Globe API and its rotating animation capability, but I want the user to be able to stop and restart the animation by double-clicking on the globe.
Currently I have the following animation code that runs onload:
function performAnimation() {
requestAnimationFrame(function animate(now) {
if (animated) {
var c = earth.getPosition();
var elapsed = before? now - before: 0;
before = now;
earth.setCenter([c[0], c[1] + 0.1*(elapsed/30)]);
requestAnimationFrame(animate);
}
});
}
And the following code stops and restarts the animation on double-click:
performAnimation()
var animated = true;
var touchtime = 0;
$('#globe').on('click', function() {
if(touchtime == 0) {
touchtime = new Date().getTime();
} else {
if(((new Date().getTime()) - touchtime) < 200) {
if (animated) {
animated = false;
} else {
animated = true;
performAnimation()
}
console.log(animated);
//alert(animated);
touchtime = 0;
} else {
touchtime = 0;
}
}
});
The stop and stop works on double-click. The problem is that when the animation is stopped, the time still elapses, and when the animation is restarted the globe's center is immediately shifted to the position it would have been in had it not stopped.
How can I ensure that when the globe animation restarts, it restarts from its current center and not the hypothetical center?