无法通过键盘事件执行功能
Unable to execute functions through keyboard events
我正在制作一个HTML游戏,在这个游戏中,我必须调用jump和walk函数,以便使用键盘键分别使角色跳跃和行走。但是我做不到!!这是我的代码:
document.getElementById('myCanvas').onkeypress = function() {
decision();
}
function decision(e){
if (e.keyCode == 87) {
jump();
}
if(e.keyCode == 68) {
walk();
}
}
也就是说,用"w"键它必须跳跃,用"d"键它可以行走。!!
function decision(e){
var keyCode = e.keyCode || e.charCode;
if (keyCode === 87) {
jump();
}
if(keyCode === 68) {
walk();
}
}
document.getElementById('myCanvas').onkeypress = decision;
你没有把e参数传递给回调,所以我很惊讶它没有被炸成未定义的。
还请注意,我如何将decision
函数引用直接分配给onkeypress
属性,而不是将其封装在匿名函数中。这将根据需要使用预期的Window
上下文直接传递参数(尽管根据回调中特定的this
要求,这种方法可能并不总是合适的)。
此外,请确保在确定元素可用后,只按id查询元素(即,将此代码放在目标节点出现在DOM中之后的某个位置,或使用jQuery等框架)
最后,e.keyCode
可能并不像您在所有浏览器中所期望的那样定义,因此您可能需要如上所述防止这种情况的发生。
尝试
document.getElementById('myCanvas').onkeypress = function(e) {
decision(e);
}
function decision(e){
if (e.which == 87) {
jump();
}
if(e.which == 68) {
walk();
}
}
还要记住,您可以使用e.which
、e.keyCode
或e.charCode
。只需检查所有这些,这取决于浏览器。
您没有将事件e传递给decision()
函数
document.getElementById('myCanvas').onkeypress = function(e) {
decision(e);
}
function decision(e){
var key = e.keyCode ? e.keyCode : e.which;
if (key == 87) {
jump();
}
if(key == 68) {
walk();
}
}
相关文章:
- 如何在onclick事件执行代码时在ImageButton上设置加载gif
- 如果类有多个事件处理程序方法,如何防止多个事件执行
- 单击事件执行单击和悬停事件处理程序,即使单击事件处理程序取消绑定所有处理程序也是如此
- 对多个滚动事件执行一次操作并防止滚动
- jQuery全局/本地事件执行顺序
- 作为预生成事件执行PowerShell脚本失败
- 允许对目标事件执行默认操作,并阻止对父级执行默认操作
- 使用点击jquery事件执行css3转换
- 阻止.mouseout事件执行
- 无法通过键盘事件执行功能
- 循环中的Javascript onclick事件执行了1次以上
- 如何将多个事件处理程序添加到同一个html元素中,并根据事件执行不同的方法
- 在Angular 2中处理click和clickOutside事件执行优先级的最佳方式
- 在mustache模板中对点击事件执行函数
- Java脚本函数,直到save事件执行完成
- 每个事件执行多次代码:多次下载
- 当onclick事件执行异步代码时,我如何在新选项卡请求中打开
- 在所有控制器中对同一个事件执行同一个函数——AngularJS
- Jquery事件执行两次
- 对img load事件执行html注释