2011-01-25 95 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); 
    } 
});