我正在研究一個名爲Smooth Div Scroll的jQuery插件(一個jQuery UI小部件),我需要在該頁面上存儲對特定於插件每個單獨實例的間隔的引用。如果我只是寫這樣的事情:在jQuery element.data對象中存儲JavaScript間隔?
var myInterval = setInterval(function() { alert("Hi!"); }, 100);
...變量myInterval實際上是window.myInterval,它會通過頁面上的插件的所有實例共享。所以當我嘗試設置或清除實例的時間間隔時,所有實例的時間間隔都將被設置/清除,因爲它們都引用相同的窗口變量。
通過瀏覽jQuery API,我發現方法.data用於存儲與匹配元素關聯的任意數據,因爲插件的每個實例都有相應的DOM元素。完善!使用這種方法,我可以存儲特定於匹配元素的數據。因此,我已構造我的這樣的代碼(其中EL是一個參考匹配元素):
el.data("myInterval", setInterval(function() { alert("Hi!"); }, 100));
在一定程度上這工作由於插件的不同實例不再引用相同的變量(間隔)。但是我注意到如果我有一個帶有2-3個插件實例的頁面,並且我爲每個實例設置了相同的時間間隔,那麼只有第一個實例開始它的時間間隔。但是如果間隔計時器很小,則只有一些元素開始它們的間隔。
我沒有做過任何深挖中的實際值,但如果我有插件的三個實例在一個頁面上,間隔設置爲5,就像這樣:
el.data("myInterval", setInterval(function() { alert("Hi!"); }, 5));
...只有第一例將開始。如果我將它增加到20-30,則其中兩個實例將啓動,如果我將它進一步增加到50,則所有三個實例都將啓動。這太奇怪了!
我的問題是:
是存儲到一個區間(使用。數據)一個好主意的參考? 如果是這樣,那麼失敗間隔的原因是什麼?
請幫我一個這個 - 我很難過! 如果您需要實際的源代碼,請查看插件頁面(本文頂部的鏈接)。
/托馬斯卡恩
這是在'.each()'迭代中嗎? – 2010-08-03 18:15:42
參考思路很好,儘管間隔對我來說似乎很小。你實際上需要每秒重複200次? – 2010-08-03 18:18:07
我使用setInterval來平滑地滾動網頁上的元素,所以我需要一個快速的間隔來獲得一個平滑的動畫,但正如你所說,我懷疑滾動實際上得到200幀/秒的幀速率時,我設置間隔5. – tkahn 2010-08-04 09:20:15