0

我写了一个函数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 时,应该调用停止函数,如果速度为 0,则应该显示结果。在 Mozilla、IE、Opera 中,它的工作方式完全符合我的要求。但是在 webkit 中,第一个 if 条件本身并没有被执行。一个无限循环正在运行。

我也尝试过嵌套 if ,即使第一个 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);
};
4

1 回答 1

0

如果您会原谅一个回避您的问题的答案,那么您确实不应该使用一些论点setInterval(请参阅thisthis)。关于时间间隔的保证强度取决于操作系统和浏览器,因此不是很强。您最好使用来安排一个在必要时setTimeout重新安排自己使用的功能。setTimeout如果您担心间隔的准确性,您可以随时将时间间隔调整为您认为合适的实时。

于 2013-02-01T07:12:23.597 回答