簡體   English   中英

在Javascript / jQuery中重啟setInterval()(不帶clearInterval)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM