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);
}
答案 0 :(得分:2)
首先,如评论中所述,确保多个计时器不同时运行。接下来,不强制每次计算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);
}
但这确实是以实际表现为代价的。