javascript - 带有 requestAnimationFrame 的 addEventListener

标签 javascript addeventlistener requestanimationframe game-loop

我正在使用 window.requestAnimationFrame 创建游戏循环。

一切都很好,但是当我尝试添加事件监听器时,它会快速触发数百次。

我尝试过使用闭包,但这似乎不起作用。

game.update = function(){
   //code that runs every frame
   window.addEventListener('keydown', function(){
      console.log("message");
   },false);
}

我想在 keydown 事件上调用函数一次,而不是多次。

最佳答案

仅当添加监听器时才会添加事件监听器。多次添加相同监听器没有效果 by design .

将您的监听器函数移出您要分配给 game.update 的函数这样每次调用 addEventListener() 时就不会创建监听器的新副本:

var updateListener = function() {
    console.log('message');
};

game.update = function() {
    //code that runs every frame
    window.addEventListener('keydown', updateListener, false);
};

关于javascript - 带有 requestAnimationFrame 的 addEventListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41071233/

相关文章:

javascript - jQuery 文档的 Vanilla JS 版本点击链接?

Javascript 动态添加事件监听器和节点引用

Javascript addEventListener 以某种方式无法在 Laravel 中使用 querySelector

javascript - Javascript Canvas 动画超出最大调用堆栈大小

javascript - PhoneGap 应用程序的最佳分析?

javascript - angular.min.js 中未处理的异常

javascript - 日期转换 JavaScript 到 PHP

javascript - JS — FLIP 技术和 requestAnimationFrame,重构为不嵌套

javascript - 在 Safari 上退出全屏切换空间时 RequestAnimationFrame 不工作

javascript - NodeJS - 获取唯一的设备指纹