Javascript 更改事件的类型

Javascript 更改事件的类型,javascript,jquery,html,canvas,Javascript,Jquery,Html,Canvas,可以在JavaScript中更改事件的类型吗? 在这个场景中,我在画布上使用jQuery触发事件,但是在这个画布中渲染的特定元素上,比如绘制的形状或图像 mousemoveevent ---> [canvas] -> [find element] ---> mousemoveoverelementevent 基本上,我通过以下方式在整个画布上捕捉onmousemove事件: $('canvas').bind('mousemove'........ 但是DOM不存在于画布中,

可以在JavaScript中更改事件的
类型吗?

在这个场景中,我在画布上使用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);
  }
});