我有一個div,每隔5秒使用一個區間跳動。Javascript - 可以檢查一個間隔是否已經設置?
當滾動到頁面底部時,該div淡出並且間隔被清除。
但是,我認爲有一個問題,間隔被創建多次,並在自身重疊。
有沒有辦法檢查是否設置了間隔,如果清除了,如果沒有,設置它?
我需要清除間隔的原因是因爲jquery的彈跳效果導致div再次出現,即使它隱藏了。
JSBIN:http://jsbin.com/ijuhok/4/
我有一個div,每隔5秒使用一個區間跳動。Javascript - 可以檢查一個間隔是否已經設置?
當滾動到頁面底部時,該div淡出並且間隔被清除。
但是,我認爲有一個問題,間隔被創建多次,並在自身重疊。
有沒有辦法檢查是否設置了間隔,如果清除了,如果沒有,設置它?
我需要清除間隔的原因是因爲jquery的彈跳效果導致div再次出現,即使它隱藏了。
JSBIN:http://jsbin.com/ijuhok/4/
你需要覆蓋現有的間隔,這樣就可以從任何地方清除:http://jsbin.com/ijuhok/5/。
$j("#more").fadeIn('slow',function(){
ResInterval = window.setInterval(bounceMore, 5000);
// no "var"
});
可以消除$(document).ready
爲window
,因爲它始終可用。
你的問題是,你在一個局部範圍界定ResInterval
,因爲你使用var
:
$j("#more").fadeIn('slow',function(){
var ResInterval = window.setInterval('bounceMore()', 5000);
});
取出var
前綴,你的代碼將如預期:目前,ResInterval
是fadeIn
中的回調函數的局部varibale。當省略var
時,間隔將被分配到最近的ResInterval
聲明(使用var
)。
嗯,確切地說 - 謝謝你的解釋,尤其是把我的注意力集中在變量的範圍上。 – waffl
我在下面做了這個,我的問題解決了。當你清除計時器時,你應該設置值爲「假」。
var timeer=false;
----
----
if(timeer==false)
{
starttimer();
}
-----
-----
function starttimer()
{
timeer=setInterval(activefunction, 1000);
}
function pausetimer()
{
clearTimeout(timeer);
timeer=false;
}
哇!你太快了,我甚至不能接受6分鐘以上的答案。完美,謝謝! - 並且感謝所有其他人提供快速且完美的解決方案 - 這絕對是因爲我們一直用'var'重新定義。 – waffl
好吧有一些非常奇怪的事情發生,如果你離開網站閒置一分鐘左右, div似乎失去了定位並移動到屏幕的頂部。你有什麼想法發生了什麼? http://dl.dropbox.com/u/396112/_IMG/_misc/setinterval-bounce.jpg(OS X 10.7.2,Chrome 15.0.874.106) – waffl
@waffl:我不知道爲什麼,但重置了CSS屬性設置似乎我的工作:http://jsbin.com/ijuhok/7/。 – pimvdb