我正在用普通香草建立一个pong模拟器javascript,你可以在Codepen或GitHub上看到代码。Mousedown事件监听器按钮按不工作
我想使用电脑的按键控制和移动设备的屏幕按键。我在屏幕上按下按钮时遇到问题。在启动脚本的149行,我试图与事件侦听器来更新leftButtonPressed变量的值:
//Storing control button presses
var leftButton = document.getElementById('left-button'); //Get left button
var leftButtonPressed = false; //variable to store whether or not the left button is pressed
var leftMouseDown = function(){ //function to update leftButtonPressed
leftButtonPressed = true;
};
var leftMouseUp = function(){ //funciton to update leftButtonPressed
leftButtonPressed = false;
};
//Event listeners to see if left button is pressed
leftButton.addEventListener('mousedown',leftMouseDown,false);
leftButton.addEventListener('mouseup',leftMouseUp, false);
//Printing left button press to screen
var buttonPressedText = document.createTextNode(leftButtonPressed);
var buttonPressedTextElement = document.getElementById('button-pressed');
buttonPressedTextElement.innerHTML = '';
buttonPressedTextElement.appendChild(buttonPressedText);
为什么我leftButtonPressed
变量更新?
以下是额外的信息来了解脚本的上下文:
我使用以下方法来更新我的对象,并以60fps重新绘制在画布上:
//Call step 60 times per second
var animate = window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
function (callback) {
window.setTimeout(callback, 1000/60);
};
;
//Loop through update, render, animate
var step = function() {
score();
update();
render();
animate(step);
};
正如你所看到的,每次更新播放器对象时都会运行更新leftButtonPress
的脚本部分。
感谢您的帮助:)
它看起来像你在每次调用播放器“更新”方法中反复调用'.addEventListener()'。这将继续添加和重新添加这些事件处理程序而不删除以前添加的事件处理程序。几秒钟后,将有数百和数百个每个事件处理程序的副本,并且它们都将在每个事件上运行。 – Pointy 2015-02-08 20:06:29
这正是我想要写的。这就是发生了什么。 – Alex 2015-02-08 20:16:57
感谢Pointy,将更新函数之外的事件监听器移动到屏幕上。 – ross 2015-02-08 23:21:50