2017-07-15 15 views
0

現在、fabric.js-initialisedキャンバステクスチャを含むAフレームプレーンから送出された合成イベントをプロキシする方法を検討中です。目標は、2Dキャンバスと相互作用しているかのように、ユーザーがファブリックアイテムをドラッグアンドドロップできるようにすることです。すべてのロジックが処理されるようになりました。たとえば、プログラムで、0,0の下にあるアイテムを取得し、それを10,10にドラッグして放すことができるようにしたいだけです。Fabric.js、手動トリガーマウス:enter/leave、mouse:move

'mouse:out'ハンドラでイベントパラメータを検査したとき、私はオブジェクトにMouseEventインスタンスの 'e'パラメータがあることに気付きました。だから私はこのような何かを試した:

let eventOptions = { 
    clientX, 
    clientY, 
    bubbles: true, 
    button: 1 
} 

let fabricCanvas = this.components.draw.fabricCanvas 
let e = new MouseEvent(event.type, eventOptions) 
fabricCanvas.trigger(aFrameEvtToFabricEvt[event.type], { e }) 

それは動作していないようだ。トリガーメソッドの2番目のパラメーターとしてeventOptionsを提供していませんでした。また、ファブリックキャンバス上のプライベートハンドラメソッド、つまり_onMouseMoveを呼び出すこともできませんでした。

これを実現する方法はありますか?

+0

一部のデバッグトリガ機能と、トリガがドラッグ/ドロップ機能を引き起こさない理由は、それらのイベントに対して登録された特定のイベントハンドラがない場合、トリガ(火災)機能が常に戻るためです。ドラッグアンドドロップ機能のイベントハンドラは、別の場所で処理する必要があります。 –

答えて

1

したがって、fabricCanvasはキャンバスにオーバーレイされた要素からイベントを取得し、いくつかのイベントリスナをトリガします。

適切なパターンでイベントをリスナーに直接転送することをお勧めします。 mousedown、マウス、マウスアップ。

let eventOptions = { 
    clientX, 
    clientY, 
    bubbles: true, 
    button: 1 
} 

このイベントはこれが

を動作するはずだけ

fabricCanvas._onMouseDown(e) 
fabricCanvas._onMouseMove(eAnotherPoint) 
fabricCanvas._onMouseUp(eAnotherPoint) 

をexecし、正しい場合、左/右/ミドルクリックを理解するために、ファブリックを使用しているbutton/buttons/whichの種類を確認してください。

+0

チップをありがとう、私は可能性を調査しようとします。問題は、ファブリックキャンバスがDOM内にないように見えることです。リスナー要素に参照でアクセスする方法があるかどうか知っていますか? –

+0

EDIT:fabricCanvas.upperCanvasElとしてイベントキャプチャを検出しました –

+0

eventCapture要素のイベントをトリガするのは失敗します。 '' 'let e = new MouseEvent(event.type、eventOptions) fabricCanvas.upperCanvasEl.dispatchEvent(e)' ''。私はまた失敗したコンテナにディスパッチしようとしました。 canvas.triggerによって起動されたイベントだけが、対応するイベントリスナーを起動させますが、このようにマウスイベント(クリック以外)を作成する方法はないようです。 –