jrl*_*589 8 javascript key-events css3
我正在开发一个小的HTML/JavaScript/CSS3项目以获得乐趣.我基本上试图制作一个在浏览器窗口中滚动的轮子.为了控制方向盘,我正在使用光标键的键盘和键控事件(左右转动方向盘,向上和向下滚动它向前或向后).
到目前为止,我的工作效果非常好,但有两个主要的故障.假设我想向前滚动轮子而不停止我想将它向右转一点,然后按住向上键并按右光标键.当我这样做时,它会在注册这两个事件并继续滚动之前暂停一下.
这是问题之一,主要的问题是,一旦我执行了前一个动作然后轮子处于一个理想的角度,如果我放开右光标键,浏览器将两个键都注册为释放并且轮子到达站着不动.这是一个jsFiddle的样子:http://jsfiddle.net/UKqwu/1/.我知道代码很乱,但这是一项正在进行的工作/学习经历,而且我只编写了一个月左右的编程.
无论如何,谢谢你的帮助.目前它只适用于Chrome,据我所知.在这个阶段没有真正困扰修复兼容性问题.
因此,所发生的情况本质上是操作系统内置的限制,但有一个简单的解决方法。首先我将解释限制,然后解释解决方法。
如果您(在文本框中)按住“j”按钮,第一个“j”会出现,然后在短暂延迟后会出现许多“j”“jjjjjjjjjjjjjjjjjjjj”
这与您遇到的问题相同。该事件触发一次,等待片刻,然后多次触发。
然而解决方案很简单。不要在事件触发时让轮子移动……让它不断更新,并分别跟踪哪些键向上或向下。
密钥处理程序看起来像这样......
function KeyHandler() {
this.left = false;
this.right= false;
...
function onKeyDown(e) {
if (e.keyCode == 37) {
this.left = true;
}
...
}
function onKeyUp(e) {
if (e.keyCode == 37) {
this.left = false;
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
(您可以将密钥处理程序附加到主体或您想要的任何元素)
你的方向盘会有一个更新功能,看起来像......
wheel.update = function() {
// the wheel is turning left
if (wheel.keyhandler.left) {
// make the appropriate adjustments
}
}
Run Code Online (Sandbox Code Playgroud)
然后游戏就会有这样的东西......
wheel = new Wheel;
setInterval(function() {
wheel.update();
},100);
Run Code Online (Sandbox Code Playgroud)
这样,您的轮子将始终根据按键的当前状态进行更新,并且您不必依赖正在触发的事件的限制。:)
| 归档时间: |
|
| 查看次数: |
624 次 |
| 最近记录: |