2013-02-01 26 views
0

我已经写了一个函数window.setinterval,后面跟两个条件。完全按照我想要的方式在Firefox,Opera,IE中工作。在webkit引擎中,这个功能并没有被推广。window.setinterval函数在不同的浏览器引擎中表现不同

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中,第一个条件本身没有被执行。无限循环正在运行。

我试过嵌套,如果也,即使然后第一条件如果条件不被执行。请帮我解决这个问题。

如果这不是一个正确的评价,我可以在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); 
}; 
+0

速度是否浮点?如果是,速度如何变为0? –

+0

有什么错误?你不显示a,b,c是什么,所以我们不能真正帮忙。 – kennypu

+0

@ t.niese不,它不是浮点数。 – Abhishek

回答

0

如果你不介意的一种是回避你的问题的答案,也有你应该不使用setInterval反正参数(见thisthis)。关于时间间隔的保证强度取决于操作系统和浏览器,因此不是很强大。你最好使用setTimeout来安排一个函数,在必要时使用setTimeout重新安排自己。如果您担心间隔的准确性,您可以随时根据需要随时调整时间间隔。

+0

谢谢。但是我希望该功能在规定的时间后重复运行。在这种情况下,setTimeout并不方便。 – Abhishek

+0

但它的确如此。这只是对事物的稍微不同的思考方式。对于重复的任务,你可以使用''setInterval'',它们将运行,除非你使用''clearInterval''(正如你所知)。 'setTimeout'''''''''''''''''''''''''''''''''''''除了必须显式地重新安排任务外,即它们只有在你传递给''setTimeout''的函数内再次调用''setTimeout'' '。 ''var任务; task = function(){finished = repeatingLogic();如果(!完成)setTimeout(task,delay);};任务();'' – acjay

+0

唯一真正有意义的区别是,现在重复任务是明确的,并且延迟是“延迟”+代码的可能可忽略的执行时间,如果它真的是可以弥补的对你很重要。 – acjay