2016-03-12 79 views
3

我有停止功能,並用鍵啓動setInterval。 它以S鍵開始並以Z鍵停止。如何設置停止/啓動setInterval功能只有一個鍵

var refreshIntervalId; 
window.addEventListener("onkeydown", keyDown,true); 
window.addEventListener("keydown", keyDown); 

    function keyDown() { 
     var e = window.event; 
     switch (e.keyCode) { 
      case 83: 
       start(); 
       break; 
      case 90: 
       stop(); 
       break; 
     } 
    } 

    function start() { 
     stop(); 
     refreshIntervalId = setInterval(function() { 
      // code... 
     },10); 
    } 

    function stop() { 
     if (refreshIntervalId != null) { 
      clearInterval(refreshIntervalId); 
      refreshIntervalId = null; 
     } 
    } 

那麼我該如何設置Z鍵來啓動和停止SetInterval? 例如我按Z鍵,它開始,然後我再次按Z鍵,它停止! 任何人都可以幫助我?

+0

您的第一個'addEventListener()'調用不正確,因爲沒有onkeydown事件,所以不會執行任何操作。在你的'keydown'函數中,你可以爲函數設置一個參數(在函數被觸發時它將成爲事件對象),而不是'var e = window.event',就像這樣:'function keydown(e) {...' –

+0

它工作正常! –

+0

它的工作原理是因爲你的第二個'addEventListener()'被正確寫入,但第一個對你沒有幫助。沒有'onkeydown'事件,所以這行不會註冊任何東西。它也有效,因爲你正在獲得對事件的參考,但是你不需要這麼做。你可以在'keydown'函數中添加一個'e'參數並刪除'var e ...'這一行。請參閱:https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener,然後滾動到「傳統Internet Explorer和attachEvent」部分。 –

回答

2

修改代碼,如下圖所示,

function keyDown() { 
var e = window.event; 
switch (e.keyCode) { 
    case 90: 
    if(refreshIntervalId) { 
     stop(); 
    } 
    else { 
     start(); 
    } 
    break; 
} 
} 

檢查refreshIntervalId是truthy值。如果是,則停止間隔,否則啓動它。

1
var boolStart = false; 


    function keyDown() { 
     var e = window.event; 
     switch (e.keyCode) { 
      case 83: 
       if(!boolStart){ 
        start();  
       }else{ 
        stop(); 
       } 

       break; 
     } 
    } 

    function start() { 
     stop(); 
     boolStart = true; 
     .. 
    } 

    function stop() { 

     boolStart = false; 
     ....   
    } 

編輯1:

您可以通過這種方式也做。

var boolStart = false; 

     function keyDown() { 
      var e = window.event; 
      switch (e.keyCode) { 
       case 83: 
       //; 
        boolStart = !boolStart; 
        if (!boolStart) { 
         start(); 
        } else { 
         stop(); 
        } 
        break; 

      } 
     } 
+0

請檢查EDIT1 –

+0

我在firefox瀏覽器中的這段代碼有問題。當我把這段代碼放在firefox控制檯中時,它說:_TypeError:e是undefined_我該如何解決這個錯誤? –