'mousemove'画布中的事件侦听器-指针仅在最后一个矩形中更改
'mousemove' event listener in canvas - pointer change in last rectangle only
https://jsfiddle.net/jlpiedra90/3a7cojgw/4/
查看上面的fiddle以获取实际代码。
我正在尝试创建一个2d画布游戏的基本菜单。我现在对大部分内容都很满意,因为它很适合我的需求。然而,除了更改屏幕所需的"mouseclick"事件外,我认为添加"mousemove"会更清楚地表明,当鼠标悬停在按钮上时,用户实际上是在鼠标悬停在他们可以单击的按钮上。
无论如何,这是我的按钮功能的相关代码:
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等库,但我不希望在这个项目中使用它们。非常感谢。
所有按钮一个接一个地设置同一节点的光标属性:#canvas
。
所以,假设光标在第二个按钮上,下面是当你得到一个事件时会发生的事情:
- 按钮1获取事件,它将
canvas
的光标设置为'auto'
- 反过来,按钮2获得事件,它将
canvas
的光标设置为'pointer'
(覆盖按钮1的操作) - 反过来,按钮3获取事件,它将设置回
canvas
的光标为'auto'
(这将覆盖两个第一的操作)
因此,目前,只有最后创建的按钮很重要。
这是一把正在工作的小提琴。我在Button构造函数中添加了一个布尔值,这样每个按钮只有在光标之前位于canvas
的顶部时才会将其设置回
相关文章:
- 表追加而不附加最后一个元素
- 无法在Ionic select中预先选择最后一个选项
- 为什么画布形状只在3个画布中的最后一个画布上渲染
- Jquery append oly获取循环Rails中的最后一个elemen
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- dataTables-如何自定义分页类型以显示最后一个页码后面的省略号,
- 多维关联数组的最后一个索引
- 无法获取vis.js最后一个或第一个选定的网络节点
- 循环以检查数组中的最后一个图像
- 从输入值中删除最后一个单词
- 尝试使用Javascript正则表达式来获取“&"分隔文本,无论它是否's是最后一个值
- 为什么这个正则表达式不't匹配最后一个字母数字字符
- 如何从多个复选框中获取最后一个值
- 将OnClick函数设置为<ul>,最后一个ul是擦除第一个ul-s
- 使用querySelector()获取最后一个td元素
- Foreach循环只返回最后一个值
- 通过将6个月添加到今天来获得最后一个月的日期's日期
- 如何使用JavaScript forloop从JSON中删除最后一个逗号
- 'mousemove'画布中的事件侦听器-指针仅在最后一个矩形中更改
- AngularJS多资源调用,只处理最后一个