window.setinterval函数在不同的浏览器引擎中表现不同

时间:2013-02-01 04:16:10

标签: javascript javascript-events cross-browser

我编写了一个函数window.setinterval,后跟两个if条件。在firefox,opera,IE中完全按照我的意愿工作。在webkit引擎中,该功能没有被继续使用。

 x = window.setInterval(function() {
            if(a.speed >= a.maxSpeed && b.speed >= b.maxSpeed && c.speed >= c.maxSpeed) {
                 a.stop();
                 b.stop();
                 c.stop();
            }
            if(a.speed === 0 && b.speed === 0 && c.speed === 0 && completed === 3) {
                window.clearInterval(x);
                enableControl();
                printResult();
                enableControl(); 
            }
        }, 100);

我设置了一个间隔,当达到max.speeds时,应调用stop函数,如果speed为0,则应显示结果。在Mozilla,IE,Opera的工作正如我想要的那样。但是在webkit中,第一个if条件本身没有被执行。无限循环正在运行。

我已经尝试嵌套了,即使这样,第一个if条件也没有被执行。请帮我解决这个问题。

如果这不是正确的apprach,我可以在c.stop()之后触发超时并手动将a,b,c的速度设为0,然后启用控制并显示结果吗?

这是你要求的停止功能。

 Slot.prototype.stop =        function() {
    var _this = this,
        limit = 30;
    clearInterval(_this.si);
    _this.si = window.setInterval(function() {
        if(_this.speed > limit) {
            _this.speed -= _this.step;
            $(_this.el).spSpeed(_this.speed);
        }
        if(_this.speed <= limit) {
            _this.finalPos(_this.el);
            $(_this.el).spSpeed(0);
            $(_this.el).spStop();
            clearInterval(_this.si);
            $(_this.el).removeClass('motion');
            _this.speed = 0;
        }
    }, 100);
};

1 个答案:

答案 0 :(得分:0)

如果您原谅一个回答您的问题的答案,那么您可能无论如何都不应该使用setInterval(请参阅thisthis)。关于时间间隔的保证强度是OS和浏览器相关的,因此不是很强。你最好使用setTimeout来安排一个在必要时使用setTimeout重新安排自己的函数。如果您担心间隔的准确性,您可以随时根据需要将时间间隔调整为实时。