为什么clearInterval不起作用

时间:2015-02-12 16:39:39

标签: javascript jquery clearinterval

我无法让clearInterval工作

$(document).ready(function(){
    $(document).keydown(function (e){
        var $timer = setInterval(function(){$("#Move").animate({marginTop:'+=10'}, 'fast');},1);
        if(e.keyCode == 40){ //DOWN
            $timer
        }
        if (e.keyCode == 38) { //UP
            clearInterval($timer);
        }
    })
});

3 个答案:

答案 0 :(得分:0)

如果你刚才:

$timer

当按下键40时,可能会将变量设置为null或undefined。

答案 1 :(得分:0)

我不确定您要尝试做什么,但代码中至少有一个问题是您将计时器ID存储在本地变量中,其值不会是保存下次你的keydown处理程序运行。使用全局代替:

var $timer;
$(document).ready(function(){
    $(document).keydown(function (e){
        if(e.keyCode == 40){ //DOWN
            clearInterval($timer);
            $timer = setInterval(function(){$("#Move").animate({marginTop:'+=10'}, 'fast');},1);
        }
        if (e.keyCode == 38) { //UP
            clearInterval($timer);
        }
    })
});

答案 2 :(得分:0)

问题在于“marginTop”。将其更改为“marginTop”:“+ = 10px”。还要将代码移到$(document).ready之外。以下应该有效。

$(document).keydown(function(e){
  if(e.keyCode == 40){
      //console.log(2)
      $timer = setInterval(function(){
         $("#Move").animate({"marginTop":"+=10px"}, "fast")
      }, 1000);
  } 
  if(e.keyCode == 38){
    //console.log(3)
    clearInterval($timer);
  }
});