2012-08-03 72 views
1

我需要構建一個在x秒後上下滾動的頁面。我只需要知道如何在延遲後啓動第二個setInterval。或者,如果人們有其他解決方案,我可以爲任在x秒後啓動第二個setInterval

這裏是代碼:

setInterval(function() { 
    scrollDown(); 
},8000); 

setInterval(function() { 
    scrollUp(); 
},8000); 

function scrollDown() { 

    $('html, body').animate({ 
     scrollTop: $("#page2").offset().top 
    }, 2000); 
} 

function scrollUp() { 

    $('html, body').animate({ 
    scrollTop: $("#page1").offset().top 
    }, 2000); 
} 
+0

爲什麼不叫的setInterval在Scrolldown已函數,而不是運行兩個定時器?然後再次在scrollUp函數中,如果需要,所以你得到所需的重複 – Dave 2012-08-03 10:28:52

+0

你可以用一個'setTimeout'來做到這一點。看我的[回覆](http://stackoverflow.com/a/11795276/448232)。 – 2012-08-03 12:03:20

回答

2

清潔和更精確的只有一個定時器要做到這一點,像這樣:

setInterval(scrollDown, 8000); 

function scrollDown() { 
    $('html, body').animate({ 
     scrollTop: $("#page2").offset().top 
    }, 2000); 

    setTimeout(scrollUp, 4000); 
} 

function scrollUp() { 
    $('html, body').animate({ 
     scrollTop: $("#page1").offset().top 
    }, 2000); 
} 
+1

謝謝你的工作! – 2012-08-03 11:10:49

+1

很高興聽到它的工作!不要忘記將您最喜歡的答案標記爲「已接受」。 – Deestan 2012-08-03 11:44:40

-1
setInterval(function() { 
    scrollDown(); 
},8000); 

setInterval(function() { 
    scrollUp(); 
},8000 + 2000); 

爲了什麼它的價值,在上面會有完全相同的效果。但是,對於代碼措辭喜歡你的要求,你可以只:

setInterval(function() { 
    scrollDown(); 
},8000); 

setInterval(function() { 
    setInterval(function() { 
     scrollUp(); 
    },8000); 
2000); 
+1

給貶低我的紳士:謹慎解釋爲什麼? – 2012-08-03 10:44:40

+0

我可以告訴你爲什麼他投票給你,你的迴應的第一部分不會做他們第一次同時觸發的問題。 – Touchpad 2016-05-18 07:19:00

0

最簡單的解決方案,試試這個:

setInterval(function() { 
    scrollDown(); 
},8000); 

setTimeOut(function(){ 
    setInterval(function() { 
     scrollUp(); 
    },8000); 
},1000); 

因爲setTimeout函數調用只需一次

0

其他人已經回答了,所以我只會補充一點:

setInterval(function() { 
    scrollDown(); 
}, 8000); 

setInterval(function() { 
    scrollUp(); 
}, 8000); 

是這樣的:

setInterval(scrollDown, 8000); 

setInterval(scrollUp, 8000); 

如果您在該匿名函數中所做的全部操作都是調用另一個命名函數 - 您只需傳遞命名函數,則不需要匿名函數進行回調。

1

您可以使用一個setTimeout,設置本身?

function setNext(up){ 
    setTimeout(function(){ 
    if(up) scrollUp(); 
    else scrollDown(); 
    setNext(!up); 
    }, 8000); 
} 

scrollDown() //first time 
setNext(true); 

聲明:我還沒有測試過。 (還)

這裏的working demo.