2011-01-25 64 views
3

是否有可能改变的JavaScript事件的type类型?改变事件的

在这种情况下,我引发了画布上使用jQuery的事件,但在此呈现特定的画布元素,如绘制的形状或图像。

mousemoveevent ---> [canvas] -> [find element] ---> mousemoveoverelementevent 

基本上我赶上的OnMouseMove事件在具有完整的画布:

$('canvas').bind('mousemove'........ 

但DOM并不在画布中存在,所以我希望它变换(在后面的过程中chatch上)于:

$('canvas').bind('mousemoveOverElement'........ 
$('canvas').bind('mouseenterOnElement'........ 
$('canvas').bind('mouseleaveOnElement'........ 

,然后分配类似

e.element = 'imageAtACertainPositionInTheCanvas' 

我喜欢,而不是通过分配一个新的回调修改的事件。

+2

如果您需要绘制的元素来触发事件,是否有一个特定的原因使用画布而不是SVG? – robertc 2011-01-25 22:49:39

+1

@robertc,是的,它主要是像素操作我正在做的“元素”。几乎没有矢量。 – 2011-01-25 23:01:08

+1

而不是试图改变事件名称,为什么不简单地创建并激发你想要的类型的新事件。 – Phrogz 2011-01-26 06:14:50

回答

1

我相信你正在寻找的答案是'jQuery自定义事件'。 jQuery自定义事件为您提供了命名和组织事件处理程序的能力;这些事件处理程序可以由$(el).trigger('the_event')触发。只是谷歌的用法和示例这个词。

我不它可能会覆盖事件对象,像e.element你虽然建议。您可能需要重新考虑流量以适应流量。

(不是这个答案价值200声誉,但在这里它是无论如何,希望这有助于你找到一个方法。)

2

我听不懂你说的话,也许你可以更具体。

我知道,你可以改变一个custom event的类型。

// 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); 

反正这个链接可以帮助您:

DOM Level 3 Events

nsIDOMWindowUtils

2

[Example]

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); 
    } 
});