求助 js 问题

2014-11-30 20:59:44 +08:00
 althoughghgh

我想写一个小游戏
网页上监听按键:
window.addEventListener( "keypress", doKeyPress, false )

doKeyPress 函数大致就是移动网页上的元素,
但我想给这个移动加一点限速,
怎样在得到一个按键事件后就丢弃一定时间内的按键事件呢?

或者别的实现方法啊,

function keyPress(e) {
  console.log("sadfsdf")
  key = e.keyCode || e.which
  keychar = String.fromCharCode(key);
  switch (key) {
    //...
  }
}
function doKeyPress(e){
  return function(){
    keyPress(e);
  }
}
3017 次点击
所在节点    JavaScript
7 条回复
luoweihua7sync
2014-11-30 22:07:50 +08:00
undersocre的debounce方法会给你思路
Tankpt
2014-11-30 22:12:36 +08:00
你可以这样试试

var a = null;

function doKeyPress(e){
if(!a){
a= setTimeout(function(){
clearTimeout(a);
a= null;
},200);
/*do press event*/
}
}
yaoyen0002
2014-11-30 22:22:40 +08:00
怎样在得到一个按键事件后就丢弃一定时间内的按键事件呢?
yaoyen0002
2014-11-30 22:24:30 +08:00
怎样在得到一个按键事件后就丢弃一定时间内的按键事件呢?
不好意思,刚点错快捷键直接发出去了。。
可以在按键后,存一个时间戳,之后的按键,都和这个时间戳对比一下间隔,小于你设定阙值的就啥都不干。。判断通过就刷新一下时间戳
pysama
2014-11-30 23:48:54 +08:00
@Tankpt 的思路是让用户的操作滞后特定时间执行

@yaoyen0002 的思路是特定时间内只执行一次 (个人更倾向这种思路)


@luoweihua7sync 的建议不错,去看_的实现。 话说你的头像真是:好坏的!!!
Tankpt
2014-12-01 09:49:41 +08:00
@pysama 嗯。然后在这个滞后时间内的所有操作都忽略。
althoughghgh
2014-12-01 12:50:06 +08:00
@yaoyen0002 @pysama
对哒,我仔细看了之后发现 kepress 事件本身也有一个时间戳的。。
可以用 e.timeStamp ,然后再存一个变量,每次比较一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/150489

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX