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-好的观点,我添加了解释,谢谢你