克隆JavaScript事件对象的最佳方法是什么,以便可以重新分派?

dev*_*os1 8 javascript events

某些浏览器不允许您重新分派已分派的事件,但允许您根据可从现有事件对象获取的值创建新的事件对象.

是否存在可用于任何事件类型的通用且可重用的解决方案,或者失败,为特定事件类型执行此操作(在我的情况下,我目前关注mousewheel事件)?

dev*_*os1 5

我找到了自己的答案,至少对于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;
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下命令在目标上调度事件:

target.dispatchEvent( evt );
Run Code Online (Sandbox Code Playgroud)


Cau*_*ite 5

现在似乎有一个更好的解决方案,因为initMouseEvent等等被弃用了.所述的MouseEvent()的构造,例如,取特性作为其第二个参数,为此,可以使用现有的MouseEvent对象的一个表:

let my_event = new MouseEvent(`foo`, some_existing_mouse_event);
dispatchEvent(my_event);
Run Code Online (Sandbox Code Playgroud)

其他类事件具有类似的构造函数,应该以相同的方式使用.比如ClipboardEvent().

jsfiddle的例子