WebGL Earth 在当前位置重启动画
WebGL Earth restart animation at current location
我正在使用 WebGL 的地球仪 API 及其旋转动画功能,但我希望用户能够通过双击地球仪来停止和重新启动动画。
目前我有以下运行 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);
}
});
}
下面的代码在双击时停止并重新启动动画:
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;
}
}
});
停停对双击有效。问题是当动画停止时,时间仍然在流逝,当动画重新开始时,地球的中心会立即转移到它本来应该在的位置,如果它没有停止的话。
如何确保地球动画重新启动时,它从当前中心而不是假设的中心重新启动?
所以我终于解决了这个问题,只需创建一个名为 dontAllowTimeElapse
的变量,该变量最初设置为 false。当用户停止动画并重新启动时,dontAllowTimeElapse
设置为 true:
if (animated) {
animated = false;
} else {
animated = true;
dontAllowTimeElapse = true;
performAnimation()
}
在动画代码中,如果dontAllowTimeElapse
为真,经过的时间重置为0,这意味着动画从停止的地方重新开始。设置新中心后,再次允许时间流逝:
if (dontAllowTimeElapse) {
elapsed = 0;
}
before = now;
earth.setCenter([c[0], c[1] + 0.1*(elapsed/30)]);
dontAllowTimeElapse = false;
requestAnimationFrame(animate);
我正在使用 WebGL 的地球仪 API 及其旋转动画功能,但我希望用户能够通过双击地球仪来停止和重新启动动画。
目前我有以下运行 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);
}
});
}
下面的代码在双击时停止并重新启动动画:
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;
}
}
});
停停对双击有效。问题是当动画停止时,时间仍然在流逝,当动画重新开始时,地球的中心会立即转移到它本来应该在的位置,如果它没有停止的话。
如何确保地球动画重新启动时,它从当前中心而不是假设的中心重新启动?
所以我终于解决了这个问题,只需创建一个名为 dontAllowTimeElapse
的变量,该变量最初设置为 false。当用户停止动画并重新启动时,dontAllowTimeElapse
设置为 true:
if (animated) {
animated = false;
} else {
animated = true;
dontAllowTimeElapse = true;
performAnimation()
}
在动画代码中,如果dontAllowTimeElapse
为真,经过的时间重置为0,这意味着动画从停止的地方重新开始。设置新中心后,再次允许时间流逝:
if (dontAllowTimeElapse) {
elapsed = 0;
}
before = now;
earth.setCenter([c[0], c[1] + 0.1*(elapsed/30)]);
dontAllowTimeElapse = false;
requestAnimationFrame(animate);