Javascript 按键延迟

Javascript 按键延迟,javascript,jquery,Javascript,Jquery,我想将jQuery中.keypress()方法的操作延迟一定时间 我寻找的解决方案如下: function sleep(milliseconds) { var start = new Date().getTime(); for (var i = 0; i < 1e7; i++) { if ((new Date().getTime() - start) > milliseconds){ break; } } } 问题说明: 假设我有一个简单的计

我想将jQuery中
.keypress()
方法的操作延迟一定时间

我寻找的解决方案如下:

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}
问题说明: 假设我有一个简单的计数器,它位于
keypress
事件处理程序中,用于计算用户按下Enter按钮的次数。在第三次点击后,我希望页面在用户按下按钮5秒钟后不会做出响应,而不会冻结整个页面(用户仍然可以点击某个
等。但在剩下的5秒钟内,任何按下键盘的操作都不会起作用(冻结
按键
事件处理程序)。

使用lodash或下划线(实用程序js库)中的函数


解除盎司仅允许在定义的时间段内触发事件一次


jQuery(“#myDiv”).on('click',u.debounce(myFunction,300,{'leading':true,'training':false}));

这里有一些非常简单的事情

var delay = ( function () {
    var ticker = null;

    return function( callback, ms ) {
        if ( ticker !== null ) {
            clearTimeout( ticker )
        }

        ticker = setTimeout(callback, ms)
    }
} () )

$(document).ready(function() {
    // Pass delay two parameters, the first one is the callback
    // You want to delay, the second is the time in milliseconds to wait
    $(document).on( "click", function() {
         delay( function(){ ... }, 3000 )
    } );
});
下面是一个如何使用此功能的示例:

这里是delay函数的另一个变体,它接受第三个参数,用于在一定数量的调用之后进行延迟

var delay = ( function () {
    var ticker = null;
    var invokedCounter = 0

    return function( callback, ms, delayAfter ) {
        if ( typeof delayAfter === "number" && delayAfter > 0 && delayAfter === invokedCounter ) {
            if ( ticker !== null ) {
                clearTimeout( ticker )
            }

            ticker = setTimeout(callback, ms)
        } else {
            invokedCounter++
            callback()
        }
    }
} () )

示例:

您的第一个代码段是一个繁忙的循环--在等待延迟过去时,它会将一个内核固定到100%。您永远不应该这样做。请四处查看事件限制,以获得您主要问题的答案。我不确定这是否有效,但请尝试以下操作:
$(document.delay(5000).keypress(function(){};)
@Manu它不起作用。@Juhana setInterval在我的情况下不起作用…无法解释的向下投票。你不想要它,因为…?(我没有向下投票)。请详细说明如何使用此选项。反Bounce允许在定义的时间段内只触发一次事件。
jQuery(“#myDiv”)。on('click',35;反Bounce(myFunction,300,{'leading':true,'training':false});
(反对票不是我的,而是提示:你的最后一条评论应该是你答案的一部分,可能包含更多关于什么的纯文本信息
debounce()
确实如此。@FrédéricHamidi感谢hintcan我能以某种方式将我的
按键处理程序传递到那里吗?当然可以,这就是全部的想法。谢谢你的回答,但是我怎么能只有当用户已经毫不延迟地点击了4次之后才延迟回叫呢?让我弄清楚,你想只在som它已经被点击了4次?在你的例子中,它在谷歌浏览器中根本没有点击。我错过了什么吗?
var delay = ( function () {
    var ticker = null;
    var invokedCounter = 0

    return function( callback, ms, delayAfter ) {
        if ( typeof delayAfter === "number" && delayAfter > 0 && delayAfter === invokedCounter ) {
            if ( ticker !== null ) {
                clearTimeout( ticker )
            }

            ticker = setTimeout(callback, ms)
        } else {
            invokedCounter++
            callback()
        }
    }
} () )