2011-01-25 14 views
3

JavaScriptのイベントtypeを変更することはできますか?イベントの種類を変更する

このシナリオでは、キャンバス上でjQueryを使用してイベントをトリガーしていますが、描かれた図形や画像のような、このキャンバスの特定の要素についてトリガーしています。

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

基本的に私は完全なキャンバスオーバーれるonmousemoveイベントをキャッチ:

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

が、私はそれが(プロセスの後半でアップchatchする)変換したいので、DOMは、キャンバス内に存在しませんTo:その後、

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

e.element = 'imageAtACertainPositionInTheCanvas' 
のようなものを割り当てます

新しいコールバックを割り当てる代わりに、変更されたイベントを渡すことをお勧めします。

+2

イベントをトリガーするために描画された要素が必要な場合は、SVGではなくキャンバスを使用している特定の理由がありますか? – robertc

+1

@robertc、ええ、それは主に私が "要素"でやっているピクセル操作です。ベクトルはほとんどありません。 –

+1

イベント名を変更しようとするのではなく、希望するタイプの新しいイベントを作成して起動するだけではいかがですか。 – Phrogz

答えて

2

あなたもSprite and Canvasの問題とそれらの相対的な悪いパフォーマンスを読みたいと思うかもしれません。

+0

+1&正しい方向を私に指摘するための答え。偉大なリンクをありがとう;)**ここでのすべての答え**は**非常に便利でした**しかし、これは私に情報の最大のリソースを提供します。 –

1

あなたが求めている答えは「jQueryカスタムイベント」です。 jQueryカスタムイベントには、イベントハンドラの名前を付けて整理する機能があります。これらのイベントハンドラは$(el).trigger('the_event')によってトリガされます。ちょうど使用法と例のための単語のためのgoogle。

イベントオブジェクトを上書きすることはできません。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

+0

ありがとうございましたが、私はそれに値しません=/ – Caio

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

これはどのブラウザでテストしましたか?私はクロムの絵が見えません... –

+0

@Caspar - 例はそれ以来更新されています。再度確認してください。 (私は残しました...なぜ、画像がないのですか?) – galambalazs

+0

私はこれが私が探しているとは思いません。 canvas.mousoverは、** new **イベントで$ img mousoverに直接渡されます。これは、画像がキャンバス内で(0,0)よりも異なるオフセットを持つ場合、$ imgは何の役割もありません。引き金。 –

関連する問題