Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 禁用键盘点击3秒钟_Javascript_Jquery - Fatal编程技术网

Javascript 禁用键盘点击3秒钟

Javascript 禁用键盘点击3秒钟,javascript,jquery,Javascript,Jquery,我有以下代码 $(document).ready(function(){ $(document).keydown(function(e){ if (e.keyCode == 37) { // do something } else if(e.keyCode == 39){ // d something } }); }); 我想阻止用户在按下right或left后三

我有以下代码

$(document).ready(function(){
    $(document).keydown(function(e){
        if (e.keyCode == 37) {
               // do something
        }
        else if(e.keyCode == 39){
          // d something
        }

    });
});
我想阻止用户在按下right或left后三秒钟内使用任何键

所以基本上他可以点击左键或右键,在做另一个动作之前,他不能在三秒钟内再做另一个动作

$(document).ready(function(){

    //keep keyboard locked/unlocked state in a variable
    var locked = false;

    $(document).keydown(function(e){

        // if keyboard is locked: exit keydown handler
        if( locked ){
           return; 
        }

        // lock keyboard input
        locked = true; 

        //you could use switch statement instead of if-else if 
        switch( e.keyCode ){
            case 37:
               // do something
               break;
            case 39:
               // do something
               break;
        }

        // unlock keyboard input after 3 seconds
        setTimeout( function(){ locked = false; },3000); 

    });
});
-注意:您需要首先单击结果面板以获得焦点


-注意:您需要首先单击结果面板以获得焦点。

您可以使用两种不同的方法

  • 检查事件内经过的时间是否正确 处理者
  • 使用本身有限且仅限的事件处理程序 最多每三秒工作一次
  • 因为第一个已经发布了,第二个非常有趣,我将描述它。 以下代码中有一个
    油门功能。其正文从underline.js库()中提取。
    此函数是一个速率限制函数,它接受一个函数,一个整数(在调用和下一个调用之前等待的秒数)并返回速率限制函数。
    
    throttle
    在这些情况下是一个非常有用的工具,我建议您学习并使用它,这样每当您需要对事件处理程序进行评级限制时,您都可以将限制逻辑保留在事件处理程序之外,并编写更清晰、更不容易出错的代码。 这是密码

    $(document).ready(function() {
    
        var keyHandler = function(e) {
            if (e.keyCode == 37) {
                console.log('left');
            } else if (e.keyCode == 39) {
                console.log('right');
            }
        }
    
        $(document).keydown(throttle(keyHandler, 3000, {trailing: false}));
    
        function throttle(func, wait, options) {
            var context, args, result;
            var timeout = null;
            var previous = 0;
            options || (options = {});
            var later = function() {
                previous = options.leading === false ? 0 : new Date;
                timeout = null;
                result = func.apply(context, args);
            };
            return function() {
                var now = new Date;
                if (!previous && options.leading === false) previous = now;
                var remaining = wait - (now - previous);
                context = this;
                args = arguments;
                if (remaining <= 0) {
                    clearTimeout(timeout);
                    timeout = null;
                    previous = now;
                    result = func.apply(context, args);
                } else if (!timeout && options.trailing !== false) {
                    timeout = setTimeout(later, remaining);
                }
                return result;
            };
        };
    
    });
    
    $(文档).ready(函数(){
    var keyHandler=函数(e){
    如果(e.keyCode==37){
    console.log('left');
    }否则如果(e.keyCode==39){
    console.log('right');
    }
    }
    $(document).keydown(throttle(keydhandler,3000,{trailing:false}));
    功能节流阀(功能、等待、选项){
    变量上下文、参数、结果;
    var超时=null;
    var-previous=0;
    选项| |(选项={});
    var later=function(){
    previous=options.leading==false?0:新日期;
    超时=空;
    结果=函数应用(上下文,参数);
    };
    返回函数(){
    var now=新日期;
    如果(!previous&&options.leading==false)previous=now;
    var剩余=等待-(现在-以前);
    上下文=这个;
    args=参数;
    
    如果(剩余你可以使用两种不同的方法

  • 检查事件内经过的时间是否正确 处理者
  • 使用本身有限且仅限的事件处理程序 最多每三秒工作一次
  • 因为第一个已经发布了,第二个非常有趣,我将描述它。 在下面的代码中有一个
    throttle
    函数。它的主体是从underline.js库()中提取的。 此函数是一个速率限制函数,它接受一个函数,一个整数(在调用和下一个调用之前等待的秒数)并返回速率限制函数。
    throttle
    在这些情况下是一个非常有用的工具,我建议您学习并使用它,这样每当您需要对事件处理程序进行评级限制时,您都可以将限制逻辑保留在事件处理程序之外,并编写更清晰、更不容易出错的代码。 这是密码

    $(document).ready(function() {
    
        var keyHandler = function(e) {
            if (e.keyCode == 37) {
                console.log('left');
            } else if (e.keyCode == 39) {
                console.log('right');
            }
        }
    
        $(document).keydown(throttle(keyHandler, 3000, {trailing: false}));
    
        function throttle(func, wait, options) {
            var context, args, result;
            var timeout = null;
            var previous = 0;
            options || (options = {});
            var later = function() {
                previous = options.leading === false ? 0 : new Date;
                timeout = null;
                result = func.apply(context, args);
            };
            return function() {
                var now = new Date;
                if (!previous && options.leading === false) previous = now;
                var remaining = wait - (now - previous);
                context = this;
                args = arguments;
                if (remaining <= 0) {
                    clearTimeout(timeout);
                    timeout = null;
                    previous = now;
                    result = func.apply(context, args);
                } else if (!timeout && options.trailing !== false) {
                    timeout = setTimeout(later, remaining);
                }
                return result;
            };
        };
    
    });
    
    $(文档).ready(函数(){
    var keyHandler=函数(e){
    如果(e.keyCode==37){
    console.log('left');
    }否则如果(e.keyCode==39){
    console.log('right');
    }
    }
    $(document).keydown(throttle(keydhandler,3000,{trailing:false}));
    功能节流阀(功能、等待、选项){
    变量上下文、参数、结果;
    var超时=null;
    var-previous=0;
    选项| |(选项={});
    var later=function(){
    previous=options.leading==false?0:新日期;
    超时=空;
    结果=函数应用(上下文,参数);
    };
    返回函数(){
    var now=新日期;
    如果(!previous&&options.leading==false)previous=now;
    var剩余=等待-(现在-以前);
    上下文=这个;
    args=参数;
    
    如果(剩下的,而不是仅仅给出一个解决方案,你应该解释它。@Ash Burlaczenko-好的观点,我添加了解释,谢谢你,而不是仅仅给出一个解决方案,你应该解释它。@Ash Burlaczenko-好的观点,我添加了解释,谢谢你