一部のブラウザーでは、既にディスパッチされたイベントを再ディスパッチすることはできませんが、既存のイベント オブジェクトから取得できる値に基づいて新しいイベント オブジェクトを作成することはできます。
どのイベントタイプでも機能する、またはそれが失敗する、特定のイベントタイプに対してこれを行う方法である、一般的で再利用可能なソリューションはありますか (私の場合、私は現在mousewheel
イベントに関心があります)?
一部のブラウザーでは、既にディスパッチされたイベントを再ディスパッチすることはできませんが、既存のイベント オブジェクトから取得できる値に基づいて新しいイベント オブジェクトを作成することはできます。
どのイベントタイプでも機能する、またはそれが失敗する、特定のイベントタイプに対してこれを行う方法である、一般的で再利用可能なソリューションはありますか (私の場合、私は現在mousewheel
イベントに関心があります)?
などは推奨されていないため、さらに優れた解決策がinitMouseEvent
あるようです。たとえば、MouseEvent()コンストラクターは、既存の MouseEvent オブジェクトを使用できる 2 番目のパラメーターとしてプロパティのテーブルを受け取ります。
let my_event = new MouseEvent(`foo`, some_existing_mouse_event);
dispatchEvent(my_event);
他のクラスのイベントには、同じ方法で使用できる同様のコンストラクターがあります。ClipboardEvent()など。
少なくとも MouseEvents については、私自身の答えを見つけました。
function cloneMouseEvent( e ) {
var evt = document.createEvent( "MouseEvent" );
evt.initMouseEvent( e.type, e.canBubble, e.cancelable, e.view, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget );
return evt;
}
次に、次を使用してターゲットにイベントをディスパッチできます。
target.dispatchEvent( evt );
(十分に文書化されていない) NWEvents ライブラリを使用することをお勧めします。
NW.Event.dispatch(target, e.type, false, e);
あらゆるイベントで動作し、古い IE でも動作します。