![](/img/trans.png)
[英]Restarting setInterval after using clearInterval in Javascript
[英]Restarting a setInterval() in Javascript/jQuery (without clearInterval)
我正在使用jQuery構建的ui選項卡。 一切都有效,除了一個問題 - 我做了一個setInterval運行一個觸發器(“click”)的函數,以便它在5000毫秒后進入下一個標簽。 它可以很好地運行每個選項卡,問題是如果用戶手動單擊選項卡,則setInterval的計時器不會在0處重新啟動。例如,如果用戶在0毫秒時在tab1上啟動並在tab2處單擊2000毫秒,setInterval不會回到0,它將從2000開始並運行到5000毫秒,然后轉到tab3。 我理解為什么會這樣,我只是想知道是否有辦法重新啟動setInterval時序而不必執行clearInterval()並創建一個全新的setInterval()。 任何見解將不勝感激。
更新
感謝回復 - 我試圖避免使用clearInterval的原因是因為我遇到了如何以clearInterval完全停止setInterval的方式編寫代碼的問題。 代碼設置為在用戶單擊選項卡時進行跟蹤。 問題是自動更改功能使用觸發器('click'),因此當選項卡自動更改時,它也運行我寫的clearInterval函數。 它本身運行起來相當不錯,但是一旦用戶開始單擊選項卡,setInterval就會表現異常並且無法預測地切換選項卡。 我懷疑發生的事情是幾個setIntervals同時運行......這是代碼(如果你還沒有猜到它,我在javascript / jquery上很新)。 我已經注釋掉了它的功能,但它仍然沒有按照我的意圖運行(從第一篇文章開始)。
// auto change tabs
if( options.interval ) {
function timerCom() {
if( !$(".controller").hasClass('paused') ) {
var i = $(".tab-current > a").attr("rel");
//alert(i);
if( i == 3 ) {i = 0};
$container
.find('a')
.eq(i)
.trigger('click');
}
}
//$("#promo-items > li > a").click(function () {
//var timer;
//if( timer != null ) {clearInterval(timer);}
timer = setInterval(timerCom, options.interval);
//});
}
不,在沒有清除定時器的情況下,無法重啟setInterval
設置的定時器。
你無法真正改變間隔或超時,只能清除它們。 這就是說創建一個清除間隔的函數應該是一件簡單的事情,然后立即用新的時間值啟動一個新的但相同的函數。
var intervalID;
var resetTimer = function() {
if (intervalID) { clearInterval(intervalID) };
intervalID = setInterval(function() {
console.log('doing stuff!');
}, 5000);
};
timer = setInterval(function() {
timerCom();
}, options.interval);
我知道這篇文章已經超過2年了,但我剛才遇到了類似的問題,我找到了解決方案。
我正在編寫一個圖像滾動條,它會在一段時間后自動切換到下一個圖像,每當我點擊導航按鈕時,轉換都會移動一次。
這是我的解決方案:
使區間變量(在您的情況下為timer
)有點全局。
即在options
部分(假設它已在前面定義,然后再分配),添加一個null timer
變量。
var options = {
'interval',
//Other variables
'timer',
};
然后,在處理click事件時調用clearInterval
兩次。
$("#promo-items > li > a").click(function () {
if( options.timer != null ) {
clearInterval(options.timer);
clearInterval(options.timer);
}
options.timer = setInterval(timerCom, options.interval);
});
對我來說就像一個魅力。
再次,對不起,如果這是太晚了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.