2013-02-01 56 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