一些浏览器不允许您重新分派已经分派的事件,但允许您根据可以从现有事件对象获得的值创建新的事件对象。
是否有适用于任何事件类型的通用且可重用的解决方案,或者如果失败,是否有针对特定事件类型执行此操作的方法(在我的情况下,我目前关心该mousewheel
事件)?
一些浏览器不允许您重新分派已经分派的事件,但允许您根据可以从现有事件对象获得的值创建新的事件对象。
是否有适用于任何事件类型的通用且可重用的解决方案,或者如果失败,是否有针对特定事件类型执行此操作的方法(在我的情况下,我目前关心该mousewheel
事件)?
似乎现在有一个更好的解决方案,因为initMouseEvent
等已被弃用。例如,MouseEvent()构造函数将属性表作为其第二个参数,您可以为此使用现有的 MouseEvent 对象:
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 );