レイヤーにいくつかのドラッグ可能な KineticJS 画像オブジェクトがあり、「touchend」イベントで独自のハンドラーを実行したいと考えています。シンプルに聞こえます!各画像オブジェクトにハンドラーを追加しました。次に例を示します。
toyKinObj.on('touchend', openBoxContactEnded);
ただし、オブジェクトの「ドラッグ可能」プロパティが「true」であるため、KineticJS は、独自のハンドラー コードに加えて、組み込みの _touchend() ハンドラーも呼び出しているようです。
私のコードは stage.clear() と e.shape.setDruggable(false) を実行しますが、これらのオブジェクトの変更は組み込みの _touchend() ハンドラーに干渉するようです。使用しているコードのバージョンによっては、イベントが存在しなくなったために KineticJS _handleEvent() ハンドラーが失敗したり、後でクリアしたレイヤーの画像が再表示されたりすることがありました (後者は、KineticJS がステージをクリアしたかったのに、イベント処理の一部としてステージ/レイヤーを再描画しようとしました)。
問題をもう少し複雑にするために、組み込みの KineticJS _touchend() ハンドラー コードの途中で自分のハンドラー コードが呼び出されているようにも見えますが、これは役に立たないと確信しています。
私の質問は: 独自のハンドラーを持つ代わりに、_touchend() ハンドラーを拡張して、メインの _touchend() コードの後にコードを実行できますか? または、 _touchend() が完了するまでコードが実行されないようにするにはどうすればよいですか? つまり、ハンドラの実行順序を制御しますか?
_touchend() をハックして、終了時にユーザー定義イベントをディスパッチし、独自のコードをトリガーすることも、KineticJS タッチ イベントを忘れて独自のドラッグ アンド ドロップ ハンドラーを実装することもできますが、何かが足りないので、もっと簡単な方法があります。