Javascript 更改事件的类型
可以在JavaScript中更改事件的Javascript 更改事件的类型,javascript,jquery,html,canvas,Javascript,Jquery,Html,Canvas,可以在JavaScript中更改事件的类型吗? 在这个场景中,我在画布上使用jQuery触发事件,但是在这个画布中渲染的特定元素上,比如绘制的形状或图像 mousemoveevent ---> [canvas] -> [find element] ---> mousemoveoverelementevent 基本上,我通过以下方式在整个画布上捕捉onmousemove事件: $('canvas').bind('mousemove'........ 但是DOM不存在于画布中,
类型吗?
在这个场景中,我在画布上使用jQuery触发事件,但是在这个画布中渲染的特定元素上,比如绘制的形状或图像
mousemoveevent ---> [canvas] -> [find element] ---> mousemoveoverelementevent
基本上,我通过以下方式在整个画布上捕捉onmousemove事件:
$('canvas').bind('mousemove'........
但是DOM不存在于画布中,因此我希望它转换(在过程的后面进行聊天)为:
然后分配类似于
e.element = 'imageAtACertainPositionInTheCanvas'
我更喜欢传递修改后的事件,而不是分配新的回调。我相信您寻求的答案是“jQuery自定义事件”。jQuery自定义事件提供了命名和组织事件处理程序的功能;然后可以通过
$(el.trigger('u事件')
触发这些事件处理程序。只需在谷歌上搜索单词的用法和示例
我不认为它会覆盖事件对象,比如你建议的e.element
。您可能需要重新考虑流程以适应它
(不是说这个答案值200美誉,但不管怎么说,它在这里,希望它能帮助你找到一种方法。)我不明白你说的话,也许你可以更具体一些 我知道你可以改变a的类型 无论如何,此链接可以帮助您: []
var img = new Image();
img.src = "...";
var $img = $(img);
$img.mousemove(function(_, e){
console.log(e.pageX);
});
$('canvas').mousemove(function(e){
if (mouse_over_image(e.pageX, e.pageY)) {
e.target = img;
$img.trigger("mousemove", e);
}
});
- 提供具有某些功能(如事件)的库。有几件事要办,要办。检查一下
- 在前面的示例中,还提供了将事件关联到画布“元素”的示例李>
您可能还想阅读的问题及其相对较差的性能。如果您需要绘制的元素来触发事件,您使用画布而不是SVG有什么具体原因吗?@robertc,是的,我主要是使用“元素”进行像素操作。几乎没有一个是vector。与其尝试更改事件名称,不如简单地创建并触发一个您想要的类型的新事件。@Phrogz,关于传递事件的“匿名”行为以及与jQuery的兼容性,我更喜欢传递带有一些更改字段的同一事件对象,而不是一个全新的事件对象。这将阻止调用者接收意外或丢失的数据或格式。您不能创建一个自定义事件,然后简单地将所有其他属性复制到其中吗?@Caspar-该示例自那时起已更新。请再查一下。(我离开了…顺便说一句,这就是为什么没有图像)我不认为这是我要找的$如果图像在画布中具有不同于(0,0)的报价集,则img在此处不起任何作用。。。。现在canvas.mousover在一个新的事件触发器中直接传递给$img mousover。+1&为我指明了正确的方向。谢谢你的链接;)这里的所有答案都非常有用,但这一个为我提供了最大的信息资源。
// Custom mouse events
var myEvent = document.createEvent ("MouseEvents");
// Click
myEvent.initMouseEvent ("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
// Dispatch
link.dispatchEvent (myEvent);
// Changed the type
myEvent.initMouseEvent ("mousemove", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
// Dispatch
link.dispatchEvent (myEvent);
var img = new Image();
img.src = "...";
var $img = $(img);
$img.mousemove(function(_, e){
console.log(e.pageX);
});
$('canvas').mousemove(function(e){
if (mouse_over_image(e.pageX, e.pageY)) {
e.target = img;
$img.trigger("mousemove", e);
}
});