addEventListener没有按预期运行
addEventListener not functioning as expected
本文关键字:运行 addEventListener 更新时间:2023-09-26
我正在将教程游戏转换为更强大的应用模式,但在重构事件监听器时遇到了问题。
在原始代码中,我在main函数中定义了侦听器集和回调函数:
(function () {
"use strict";
GAME.init();
function main() {
GAME.stopMain = window.requestAnimationFrame(main);
GAME.draw();
GAME.update();
}
document.addEventListener("keydown", keyDownHandler, false);
document.addEventListener("keyup", keyUpHandler, false);
function keyDownHandler(e) {
if (e.keyCode === 39) {
GAME.inputs.rightPressed = true;
} else if (e.keyCode === 37) {
GAME.inputs.leftPressed = true;
}
}
function keyUpHandler(e) {
if (e.keyCode === 39) {
GAME.inputs.rightPressed = false;
} else if (e.keyCode === 37) {
GAME.inputs.leftPressed = false;
}
}
main();
})();
当我将侦听器和回调器交换为对GAME.inputs.init();
的调用并创建GAME.inputs
的这个方法时:
GAME.inputs: {
keyDownHandler: function(e) {
if (e.keyCode === 39) {
this.rightPressed = true;
} else if (e.keyCode === 37) {
this.leftPressed = true;
}
},
keyUpHandler: function(e) {
if (e.keyCode === 39) {
this.rightPressed = false;
} else if (e.keyCode === 37) {
this.leftPressed = false;
}
},
init: function() {
document.addEventListener("keydown", this.keyDownHandler, false);
document.addEventListener("keyup", this.keyUpHandler, false);
}
};
事件监听器停止注册。我以前有过这个问题,只是恢复到旧的方式,但我想了解为什么这不起作用。
你需要调用bind,所以它的作用域不是文档。
document.addEventListener("keydown", this.keyDownHandler.bind(this), false);
document.addEventListener("keyup", this.keyUpHandler.bind(this), false);
,根据初始化的方式,它实际上可能是
document.addEventListener("keydown", this.inputs.keyDownHandler.bind(this), false);
document.addEventListener("keyup", this.inputs.keyUpHandler.bind(this), false);
相关文章:
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Angularjs代码未在匿名函数中运行
- jquery设置为使用参数运行
- 如何根据时间运行不同的脚本
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 将文本框链接到由按钮运行的javascript公式
- 为什么不是't运行此Javascript的Chrome
- ng应用程序使脚本无限运行
- 如何在运行时在angular 2中加载外部js脚本
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- JavaScript错误:Microsoft JScript运行时错误:应为对象
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 如何使用JS/nightwatchjs并行运行多个测试
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- 我的HTML按钮没有在Javascript中运行
- 使用JS在服务器上运行PHP脚本