如果单击按钮,我的keydown事件会运行太多次

时间:2014-06-02 08:08:20

标签: javascript jquery html

$(document).keydown(function(e) {
      if(e.keyCode == 37) { // left
            e.preventDefault();
            $("#news_container_inner").animate({
                // zuun
                left: (int_px($("#news_container_inner").css("left")) + 945) > 0 ? MAX_LENGTH : "+=945"
            });
            $('#dragBar').animate({
                left: (int_px($("#dragBar").css("left")) - dragBar_road) < 0 ? MAX_LENGTH_Drag+1 : "-="+dragBar_road
            });
            console.log('left');
      }
      else if(e.keyCode == 39) { // right
        e.preventDefault();
        $("#news_container_inner").animate({
          // baruun
          left: (int_px($("#news_container_inner").css("left")) - 945) < MAX_LENGTH ? 0 : "-=945"
        });
        $('#dragBar').animate({
            left: (int_px($("#dragBar").css("left")) + dragBar_road) > MAX_LENGTH_Drag+1 ? 1 : "+="+dragBar_road
        });
        console.log('right');
      }
    });

这是我的代码。问题是,如果我单击右箭头按钮1秒,此事件运行35次。如果我点击1秒钟,我需要绑定它3到4次。 抱歉英文不好。 请帮帮我。

1 个答案:

答案 0 :(得分:2)

如果您只是想解雇它,您可以使用计数器,例如4次:

var counter = 0;

$(document).on('keydown', function(e) {
    e.preventDefault();
    counter++;

    if(counter > 4) {
        return;
    }

    if(e.keyCode == 37) { 
        console.log('left');
    } else if(e.keyCode == 39) {      
        console.log('right');
    }

}).on('keyup', function(e) {
    counter = 0;
});

DEMO

修改

如果您想限制每秒的事件数,可以使用setInterval

var counter = 0,
    intervalInited = false;

function initInterval() { 
    intervalInited = true;

    setInterval(function(){
        if(counter > 4) {
            counter = 0;
        }
    }, 1000);
}

$(document).on('keydown', function(e) {
    e.preventDefault();
    counter++;

    if(counter > 4) {
        if(!intervalInited) {
            initInterval();
        }
        return;
    }

    if(e.keyCode == 37) { 
        console.log('left');
    } else if(e.keyCode == 39) {      
        console.log('right');
    }

}).on('keyup', function(e) {
    counter = 0;
});

DEMO