繁体   English   中英

window.setinterval函数在不同的浏览器引擎中的行为不同

[英]window.setinterval function behaving differently in different browser engines

我写了一个函数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);

我设置了一个间隔,当达到最大速度时,应调用停止功能,如果速度为0,则应显示结果。 在IE的Mozilla中,Opera的运行完全符合我的要求。 但是在webkit中,第一个if条件本身并未执行。 无限循环正在运行。

我也尝试过嵌套(如果也),即使条件未执行,也是如此。 请帮助我解决此问题。

如果这不是正确的方法,我可以在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);
};

如果您会以这样的回答来回避您的问题,那么有一些参数您实际上不应该使用setInterval (请参阅thisthis )。 关于时间间隔的保证的强度取决于操作系统和浏览器,因此不是很强。 最好使用setTimeout来安排一个函数,该函数在必要时使用setTimeout重新安排自身的时间。 如果您担心间隔的准确性,可以随时根据需要调整时间间隔为实时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM