禁用键盘点击3秒钟
disable keyboard clicks for 3 seconds
我有以下代码
$(document).ready(function(){
$(document).keydown(function(e){
if (e.keyCode == 37) {
// do something
}
else if(e.keyCode == 39){
// d something
}
});
});
我想防止用户在按下右键或左键后使用任何键三秒钟。
所以基本上,他可以向左或向右点击,在再做一个动作之前,他不能再做三秒。
$(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);
});
});
JSFIDDLE-注意:您需要首先单击结果面板才能获得焦点。
您可以使用两种不同的方法
- 检查事件内部是否经过了适当的时间处理程序
- 使用事件处理程序,该事件处理程序本身是有限的并且仅限于最多每三秒工作一次
由于第一个已经发布,第二个非常有趣,我将描述它。在下面的代码中有一个throttle
函数。它的主体是从underscore.js库中提取的(http://underscorejs.org/#throttle)。此函数是一个速率限制函数,它接受一个函数、一个整数(在调用和下一个调用之前等待的秒数)并返回速率限制函数。在这种情况下,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;
};
};
});
当然,如果包含underscore.js库,则不需要在代码中定义throttle
函数,只需使用库中包含的函数即可。键控线变为$(document).keydown(_.throttle(keyHandler, 3000, {trailing: false}));
这是一把正在工作的小提琴http://jsfiddle.net/n5L3m/(要使用它,您应该点击结果面板来关注它)
相关文章:
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- Android键盘不适用于包含Javascript的网页
- javascript虚拟键盘
- iPad虚拟键盘-哪一个-javasctript解决方案
- React Native DeviceEventEmitter键盘WillShow停止工作
- 通过键盘编写SVG文本
- 使用键盘箭头在画布上移动字符串
- 将select2与jQuery虚拟键盘配合使用
- 显示数字键盘的Phonegap-js提示
- 当屏幕键盘出现在手机中时,窗体会隐藏起来
- 完整的网站控制与键盘(无鼠标)
- 使用javascript为web应用程序自定义键盘快捷键
- 如何使键盘在多页的Iphone窗体上消失
- 几秒钟后显示弹出窗口.
- jQuery在5秒钟后隐藏/删除DIV内容
- 如何在JavaScript中启动键盘快捷键函数
- 用键盘分页jQuery下一个和上一个控件.触发器('点击')不'不起作用
- Javascript-iPad Tab键检测,带蓝牙键盘
- 如何使荷兰拍卖系统的价格每秒钟都在下降
- 如何从用户那里读取键盘值