1)chrome,firefox很好但在IE8中很慢
2)浏览器放大/缩小,调整大小等后非常慢
3)为什么?内存泄漏?要么 ?
function moveX(object, coord){
var v = (coord < 0) ? -1 : 1;
var timer = setInterval(function(){
var x = object.offsetLeft + v;
v *= 2;
if((v < 0 && x > coord) || (v > 0 && x < coord))
object.style.left = x + "px";
else{
clearInterval(timer);
object.style.left = coord + "px";
}
}, 25);
}
最佳答案 首先,如评论中所述,确保多个计时器不同时运行.接下来,不强制每次计算offsetLeft也可以提供相当快的速度.
function moveX(object, coord) {
var v = coord < 0 ? -1 : 1;
var x = object.offsetLeft;
var timer = setInterval(function () {
x += v;
v *= 2;
if ((v < 0 && x > coord) || (v > 0 && x < coord)) {
object.style.left = x + "px";
} else {
clearInterval(timer);
object.style.left = coord + "px";
}
}, 25);
}
此外,您的动作取决于计时器打勾所需的时间;任何性能差异都可以通过专门使用时间来平滑(虽然你不能在IE 8中正确地执行此操作;没有单调计时器API):
function moveX(object, coord) {
var v = coord < 0 ? -1 : 1;
var startX = object.offsetLeft;
var start = new Date().getTime();
var timer = setInterval(function () {
var t = new Date() - start;
var x = startX + v * Math.pow(2, t / 25);
if ((v < 0 && x > coord) || (v > 0 && x < coord)) {
object.style.left = x + "px";
} else {
clearInterval(timer);
object.style.left = coord + "px";
}
}, 25);
}
但这确实是以实际表现为代价的.