2011-10-31 78 views
3

我有一個div,每隔5秒使用一個區間跳動。Javascript - 可以檢查一個間隔是否已經設置?

當滾動到頁面底部時,該div淡出並且間隔被清除。

但是,我認爲有一個問題,間隔被創建多次,並在自身重疊。

有沒有辦法檢查是否設置了間隔,如果清除了,如果沒有,設置它?

我需要清除間隔的原因是因爲jquery的彈跳效果導致div再次出現,即使它隱藏了。

JSBIN:http://jsbin.com/ijuhok/4/

回答

4

看來你設定的時間間隔時,它滾動。所以,如果我向下滾動,然後再次向下滾動,則將其設置兩次。

每次設置它時,請事先清除它,你應該沒問題。

http://jsbin.com/ijuhok/6

4

你需要覆蓋現有的間隔,這樣就可以從任何地方清除:http://jsbin.com/ijuhok/5/

$j("#more").fadeIn('slow',function(){ 
    ResInterval = window.setInterval(bounceMore, 5000); 
    // no "var" 
}); 

可以消除$(document).readywindow,因爲它始終可用。

+0

哇!你太快了,我甚至不能接受6分鐘以上的答案。完美,謝謝! - 並且感謝所有其他人提供快速且完美的解決方案 - 這絕對是因爲我們一直用'var'重新定義。 – waffl

+0

好吧有一些非常奇怪的事情發生,如果你離開網站閒置一分鐘左右, div似乎失去了定位並移動到屏幕的頂部。你有什麼想法發生了什麼? http://dl.dropbox.com/u/396112/_IMG/_misc/setinterval-bounce.jpg(OS X 10.7.2,Chrome 15.0.874.106) – waffl

+0

@waffl:我不知道爲什麼,但重置了CSS屬性設置似乎我的工作:http://jsbin.com/ijuhok/7/。 – pimvdb

1

你的問題是,你在一個局部範圍界定ResInterval,因爲你使用var

$j("#more").fadeIn('slow',function(){ 
    var ResInterval = window.setInterval('bounceMore()', 5000); 
}); 

取出var前綴,你的代碼將如預期:目前,ResIntervalfadeIn中的回調函數的局部varibale。當省略var時,間隔將被分配到最近的ResInterval聲明(使用var)。

+0

嗯,確切地說 - 謝謝你的解釋,尤其是把我的注意力集中在變量的範圍上。 – waffl

0

我在下面做了這個,我的問題解決了。當你清除計時器時,你應該設置值爲「假」。

var timeer=false; 
---- 
---- 
if(timeer==false) 
{ 
    starttimer(); 
} 
----- 
----- 
function starttimer() 
{ 
    timeer=setInterval(activefunction, 1000); 
} 

function pausetimer() 
{ 
    clearTimeout(timeer); 
    timeer=false; 
} 
相關問題