2011-07-26 62 views
1

我一些動畫過程中的JavaScript與此代碼:的setTimeout在Javascript

var direction = $('#rightControl'); 
    function animate() 
    { 
     if (hover) return; 

     if (!direction.is(':visible')) 
     { 
      if (direction.attr('id') == 'rightControl') direction = $('#leftControl'); 
      else direction = $('#rightControl'); 
     } 

     doMove(direction); 
    } 

    // Animate slider! 
    setInterval(animate, 2500); 

直到元素#rightControl存在於頁:調用animate()功能每一塊有2.5秒,移動我的div(內doMove)。當#rightControl消失我改變方向到#leftControl,...

一切工作很酷,但當頁面在後臺幾次(例如,4-5分鐘),動畫變得瘋狂,並調用每100-200女士。怎麼了?

+3

調用'setInterval'的代碼位於何處?它是否在另一個函數的主體中,是否有可能多次調用該函數? –

+0

@ kirk-woll它被稱爲:'$(document).ready(function(){....});'。只有一次。 – Ockonal

+0

這個http://jsfiddle.net/simevidas/gHZSW/表明,只要setInterval高於鉗位閾值,它就是可靠的。 –

回答

0

我能猜到的是要麼setInterval()被別的地方調用,要麼animate()是。

試試這個小提琴:http://jsfiddle.net/fXJbW/ 它工作正常,只有animate()setInterval()。問題在於你的代碼的其餘部分。

你可以做的另一件事情是這樣的:

var timeout; 

function animate() 
{ 
    // do stuff here 
    clearTimeout(timeout); 
    timeout=setTimeout(animate,2500); 
} 
0

嗯,setInterval的只是增加了一些東西到調用堆棧每*秒。如果有一些JavaScript被執行了幾秒鐘,事情可能會在調用堆棧上建立起來。如果頁面也在後臺,我想這可能會發生。檢查它是否適用於setTimeouts(所以1或函數調用來啓動它,在函數結束時爲1)。