首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何让一个键盘按钮在javascript中不被垃圾邮件。(进行延迟)

如何让一个键盘按钮在javascript中不被垃圾邮件。(进行延迟)
EN

Stack Overflow用户
提问于 2018-08-08 11:22:57
回答 2查看 85关注 0票数 0

当我想要跳跃的时候,我正在开发Babylon.js。我找到了一个网站并复制了它的跳转代码,它工作得很完美!但我想做一个真正的游戏,我不希望人们垃圾邮件空格键飞起来。我怎么才能让它有几秒钟的延迟,这样就没有人可以继续发送空格键并继续飞行了?

代码语言:javascript
代码运行次数:0
运行
复制
function jump(){
  camera.cameraDirection.y = 2;
}

document.body.onkeyup = function(e){
  if(e.keyCode == 32){
    //your code
    console.log("jump");
    setTimeout(jump(), 1000); 

  }
}

链接到我的游戏

https://playground.babylonjs.com/#JCE1G3

EN

回答 2

Stack Overflow用户

发布于 2018-08-08 11:28:39

一种选择是创建一个持久的布尔变量,比如justJumped,只有在justJumpedfalse时才跳转。跳转时,将justJumped设置为true,并创建一个超时,以便在跳转持续时间(看起来略小于半秒)后将其重置回false

代码语言:javascript
代码运行次数:0
运行
复制
let justJumped = false;
document.body.onkeyup = function(e) {
  if (e.keyCode == 32 && !justJumped) {
    justJumped = true;
    setTimeout(() => justJumped = false, 400)
    console.log("jump");
    jump();
  }
}

还要注意的是,setTimeout(jump(), 1000);可能并没有按照您的想法去做--它会立即调用jump。如果您想在1000ms之后调用jump函数,只需传递函数名本身

代码语言:javascript
代码运行次数:0
运行
复制
let justJumped = false;
document.body.onkeyup = function(e) {
  if (e.keyCode == 32 && !justJumped) {
    justJumped = true;
    setTimeout(() => justJumped = false, 1400)
    console.log("jump");
    setTimeout(jump, 1000);
  }
}
票数 1
EN

Stack Overflow用户

发布于 2018-08-08 11:53:29

您也可以使用其他库来实现它。我最喜欢的是lodash。您可以使用_.throttle

代码语言:javascript
代码运行次数:0
运行
复制
var throttled = _.throttle(jump, 1000);
document.body.onkeyup = function(e) {
    if (e.keyCode == 32) {
       throttled()
    }
}

如果你不想在第一个键弹出后立即跳起来。您可以添加选项trailing: false

代码语言:javascript
代码运行次数:0
运行
复制
var throttled = _.throttle(jump, 1000, { 'trailing': false });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51738183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档