2016-03-12 45 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_我该如何解决这个错误? –