【发布时间】:2015-04-01 00:42:01
【问题描述】:
https://jsfiddle.net/jlpiedra90/3a7cojgw/4/
查看上面的小提琴以获取实际代码。
我正在尝试为 2d 画布游戏创建基本菜单。目前我对其中的大部分内容都很满意,因为它可以很好地满足我的需要。但是,除了更改屏幕所需的“mouseclick”事件之外,我认为添加“mousemove”会更清楚地表明,当将鼠标悬停在按钮上时,用户实际上是在将鼠标悬停在他们可以单击的按钮上。
无论如何,这是我的 Button 函数的相关代码:
var Button = function(...) {
...
I.over = function(event) {
x = event.offsetX;
y = event.offsetY;
if (x >= I.bX && x <= (I.bX+I.bW) && y >= I.bY && y <= (I.bY+I.bH)) {
$('#canvas').css('cursor','pointer');
} else {
$('#canvas').css('cursor','auto');
};
};
I.removePress = function () {
canv.removeEventListener('mousemove', I.over, false);
canv.removeEventListener('mousedown', I.pressed, false);
};
canv.addEventListener('mousemove', I.over, false);
canv.addEventListener('mousedown', I.pressed, false);
return I;
};
当我将每个按钮“函数”推送到数组 GUI 时,添加了事件侦听器。奇怪的是,虽然 'mousedown' 侦听器对每个单独的按钮都正常工作,但 'mousemove' 侦听器只会在添加的最后一个按钮上工作。因此,将鼠标悬停在“关于”按钮上会显示更改后的光标;这不是“帮助”或“开始”的情况。我正在使用 jQuery 来处理光标更改。
如果能提供任何帮助来纠正这个问题,我们将不胜感激,但请注意,我正在尽我所能从头开始做这件事。我知道像 Easel、Create 等库,但不希望在这个项目中使用它们。谢谢!
【问题讨论】:
-
最有可能的是,当您创建第二个按钮时,您删除了第一个按钮的事件侦听器。然后当你为你的第三个按钮创建事件监听器时,你删除第二个按钮的事件监听器。
-
jsfiddle.net/3a7cojgw/6 更新: 经过更多的修改后,看起来问题可能不在于“mousemove”的事件监听器,而在于 jQuery 如何处理 CSS 更改。用 'alert' 事件替换光标更改表明 'Button.over' 正在为 所有按钮 单独执行。虽然我有点松了口气,但我现在想知道还有多少其他方法可以更改光标...
标签: javascript jquery html canvas