【问题标题】:'mousemove' event listener in canvas - pointer change in last rectangle only画布中的“mousemove”事件侦听器 - 仅在最后一个矩形中更改指针
【发布时间】: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


【解决方案1】:

全部你的按钮设置,一个接一个,同一节点的光标属性:#canvas

所以,假设光标在第二个按钮上,当你得到一个事件时会发生以下情况:

  1. 按钮1获取事件,它将canvas的光标设置为'auto'
  2. 反过来,按钮 2 获得事件,它将 canvas 的光标设置为 'pointer'(这会覆盖按钮 1 所做的事情)。
  3. 反过来,按钮 3 获取事件,它将 back canvas 的光标设置为 'auto'(这会覆盖两个第一个所做的)。

因此,目前只有最后创建的按钮很重要。

Here is a working fiddle。我在您的 Button 构造函数中添加了一个布尔值,以便每个按钮仅在光标之前位于其顶部时才设置回 canvas 的光标。

【讨论】:

  • 所以,'mouseover' 事件有效地监听了我添加的所有按钮,这就是为什么即使它在第一个 (Button1.over = true) 上,它不在第二个 (Button2. over = false) 所以它将被设置为 false。而且,由于没有什么能取代第三个按钮的功能,它会显示指针。现在有道理了!非常感谢您的帮助,回答+解释!
  • 欢迎您。顺便说一句,请注意,我认为您滚动页面时的按钮有问题。
  • 是的,在我对 Niddro 的评论发布的回复中,我看到并纠正了这一点。与 canvas.offset_ 命令有关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
相关资源
最近更新 更多