2016-08-19 132 views
0

我試圖通過索引爲i的數組進行循環。 目前每5秒增加i按鍵後重新啓動setInterval計時器

但是,我想添加手動遞增i的選項,它應該將計時器重置爲5秒(5000)。我如何成功實現這一目標?

因此,例如,

[a, b, c, d, e, f, g] 

上的開始,它應該顯示(或其他功能我選擇以後)「一」,等待5秒鐘,顯示「B」 如果我按下右箭頭鍵那麼它應該立即移到「c」,但是再等5秒鐘,除非再次按 - >。

我試着把增量放在一個單獨的函數中,但是這並沒有很好地工作。

function doThis() { 
if (i < (l + 1)) { 
         $('#myDiv').html(myArray[i]); 

         i++; 
         if (i == (l + 1)) { 
          doNext(); 
         } 
        }} 

        var intervalHandle = setInterval(doThis, 5000); // start the interval by default 
        var running = true; // true if the interval is running, false if its not. 




          $("body").keydown(function (e) { 
           if (e.keyCode == 39) {//right 

            console.log("testing"); 
            if (running) { 
             clearInterval(intervalHandle); // stop interval 
             running = false; // mark interval as stopped 
            } else { 
             intervalHandle = setInterval(doThis, 5000); // start interval 
             running = true; // mark interval as started 
             doThis(); // also change the image right now 
            } 


           } else { 
            e.preventDefault(); 
           } 

          }); 

function doNext(){ 
//something here, when i ==l+1 as noted above 
} 
+0

建議:如果用戶選擇查看內容,請完全停止定時器。他們可能讀得慢,需要超過五秒鐘,而且他們已經明確表示他們知道如何手動控制它。 – zzzzBov

回答

1

一個可能的解決方案是包裝在封閉地方,而直接調用的setInterval你打電話,將調用的setInterval,然後返回一個可用於重置間隔遞增傳遞的函數的函數工作值。

function startInterval(i) { 
    var interval = setInterval(function() { 
    i++ 
    }, 5000); 

    return function() { 
    clearInterval(interval) 
    i++; 
    interval = setInterval(function() { 
    i++ 
    }, 5000); 
    } 
} 

var i = 0; 
var manualIncrement = startInterval(i); 

$('body').keydown(function(e) { 
    if(e.keyCode === 39) { 
    manualIncrement(); 
    } else { 
    e.preventDefault(); 
    } 
}) 
+0

謝謝@mkalish的幫助!我仍然有點困惑。 手動增量在哪裏起作用? –

+0

@turner我更新了示例以顯示返回的'manualIncrement'函數將被調用的位置。 – mkalish

+0

再次感謝你!我已經更新了我的代碼。 我試過了你寫的那個,但它似乎並沒有爲我工作,所以我以另一種方式接近它,但仍然無法工作。如果您有任何意見,將不勝感激。 –