为什么第一次按键时没有触发“键下”/“键”
Why is 'keydown'/'keyup' not triggering on the first key press?
我有一个精灵,它通过左右箭头键在 x 轴上动画化。它被设置为在"键下"移动并在"键上停止"。问题是,它仅在第二次按键后动画化。我还尝试按住左键或右键 - 在"键控"时,精灵仍然会动画。同样,这在第二次按下"相同"键后会抵消。
我的事件从第 54 行开始。
我已经设置了一个控制台日志,因此通过在查看事件的同时打开控制台来更容易理解。
哦,是的,我正在使用EaselJS库和Mousetrap键盘快捷键库;不确定这有什么不同,因为我的问题基本上与浏览器有关。 对我现有代码的任何解决方法或帮助都会很棒。
function move() {
if (rightHeld) { // move right
var speed = 3;
chuck.x += speed;
chuck.scaleX = 1;
} // end move right
if (rightHeld && keyDown == false) { // animate move right
chuck.gotoAndStop('idle');
chuck.gotoAndPlay('walk');
keyDown = true;
} // end animate move right
if (leftHeld) { // move left
var speed = 3;
chuck.x -= speed;
chuck.scaleX =- 1;
} // end move left
if (leftHeld && keyDown == false) { // animate move left
chuck.gotoAndStop('idle');
chuck.gotoAndPlay('walk');
keyDown = true;
} // end animate move left
} // end function move
/* KEYDOWN*/
function handleKeyDown(event) {
Mousetrap.bind('right', function () {
rightHeld = true;
console.log('keydown right');
}, 'keydown'); // end 'right'
Mousetrap.bind('left', function () {
leftHeld = true;
console.log('keydown left');
}, 'keydown'); // end 'left'
} // end function handleKeyDown
/* KEY UP */
function handleKeyUp() {
Mousetrap.bind('right', function () {
chuck.gotoAndStop('walk');
chuck.gotoAndPlay('idle');
rightHeld = false;
keyDown = false;
console.log('keyup right');
}, 'keyup'); // end 'right'
Mousetrap.bind('left', function () {
chuck.gotoAndStop('walk');
chuck.gotoAndPlay('idle');
leftHeld = false;
keyDown = false;
console.log('keyup left');
}, 'keyup'); // end 'left'
} // end function handleKeyUp
JSFiddle
谢谢聪明人!
您在第一次keydown
/keyup
上绑定事件侦听器,这就是为什么它在第一次尝试时不起作用的原因。检查固定的小提琴。
改变:
window.onkeydown = handleKeyDown;
window.onkeyup = handleKeyUp;
自:
handleKeyDown();
handleKeyUp();
换句话说,您正在执行如下操作:
button.onclick = function () {
button.onclick = function () {
alert("you click!");
};
};
(请参阅此小提琴作为上述代码的示例)
第一次单击将绑定alert
以进行下一次单击,但它不会执行任何其他操作。这就是为什么它从第二次开始工作,并且您的代码也发生了类似的事情。
相关文章:
- 在没有焦点的情况下捕获画布上的第一次单击事件
- 检查某个键是否按下两次
- Javascript开始处理下一个事件,然后第一次完成
- 点击正文仅在第一次点击时向下滚动 100vh
- 按下键在第一次按键和随后的按键后暂停
- JQuery :第一次按下时按键不起作用
- 为什么第一次按键时没有触发“键下”/“键”
- Jquery 键关闭事件仅在每秒按下一次时起作用
- 在 onKeyup AJAX 调用第一次不起作用或按回键时
- 如何停止在第一次按下回车键时触发第一个 onclick 事件的元素
- Javascript计算器退格键第一次不起作用
- 只按下一次键,而不是连续按下一次
- 在第一个数组的下一次迭代之前,遍历一个数组并连接另一个数组的所有值
- javascript向下拖动一个元素.第一次拖动后跳转
- Angularjs的$location第一次不会被触发,下一次会使用旧值
- 禁用输入键盘3秒后,第一次按下并重新启用输入键盘再次
- Ajax实时搜索在按下第一个键后添加定时器
- 防止按下enter键时多次调用按键方法
- 在第一次单击打开下拉菜单的按钮时更改类
- 当用户第一次访问网站时,创建下拉横幅