在ie8中,javascript设置间隔很慢

在ie8中,javascript设置间隔很慢,javascript,Javascript,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

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);
}
函数moveX(对象,坐标){
var v=(协方差<0)?-1:1;
var timer=setInterval(函数(){
var x=object.offsetLeft+v;
v*=2;
if((v<0&&x>coord)|(v>0&&x
首先,如评论中所述,确保多个计时器不会同时运行。其次,不强制每次计算
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);
}
函数moveX(对象,坐标){
var v=坐标<0?-1:1;
var x=object.offsetLeft;
变量计时器=设置间隔(函数(){
x+=v;
v*=2;
if((v<0&&x>coord)|(v>0&&x
此外,你的动作取决于计时器的计时时间;任何性能差异都可以通过专门使用时间来消除(尽管在IE 8中不能正确地做到这一点;没有单调的计时器API):

函数moveX(对象,坐标){
var v=坐标<0?-1:1;
var startX=object.offsetLeft;
var start=new Date().getTime();
变量计时器=设置间隔(函数(){
var t=新日期()-开始;
var x=startX+v*数学功率(2,t/25);
if((v<0&&x>coord)|(v>0&&x

不过,这确实是以实际性能为代价的。

ie8太差劲了,就像5年前一样,javascript在ie8中运行得很慢。javasript的运行速度可能与此无关。你可能是对的,除非他们的机器本身很糟糕,不管怎样,IE8很糟糕,它在页面上做事情的速度很慢。如果多次调用
moveX
,它将启动多个计时器。除非有真正的理由支持IE8,否则不要使用IE8。
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);
}