如何调度鼠标滚轮事件在旧的IE



我想在IE8中创建并触发/调度一个mousewheel事件,我可以在事件处理程序中跟踪。

在IE8 document.createEvent == undefined,所以尝试了这个,但没有成功:

var evt = document.createEventObject();
view.fireEvent('onMouseWheelEvent');

我想在IE7~9中触发和监听鼠标滚轮事件。

看起来就IE8的支持而言,你可能不太走运。我发现相当多的证据(微软/谷歌,Mozilla, Facebook), IE8实现处理鼠标滚轮/滚动事件的方式,你不能绕过他们。

您需要在参数中传递事件对象给fireEvent,而不仅仅是事件类型。

var evt = document.createEventObject();
view.fireEvent('onMouseWheelEvent', evt);

检查文档是否存在。createEvent if(document.createEvent)并执行上述或

var evt = document.createEvent('MouseWheelEvent');
evt.initMouseWheelEvent( evt, true, true );
view.dispatchEvent( evt );

这在ie8和FireFox中都适用:

var triggerButton = document.getElementById("triggerMouseWheel");
triggerButton.onclick = function() {
    if (document.createEvent) {
        var mouseEvent = document.createEvent('MouseEvent');
        mouseEvent.initMouseEvent(
            'DOMMouseScroll',
            true, true, window, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, null
        );
        document.dispatchEvent(mouseEvent);
    } else if (document.createEventObject) {
        var mousewheelEvent = document.createEventObject(window.event);
        document.fireEvent("onmousewheel", mousewheelEvent);
    }
}

使用createEventObject的第二部分是在IE8及以下版本中使用的,我相信。

我用来添加事件处理程序的代码也在下面供参考:
function addMouseWheelEvent(element, mouseWheelHandler) {
    if (element.addEventListener) {
        // IE9, Chrome, Safari, Opera
        element.addEventListener("mousewheel", mouseWheelHandler, false);
        // Firefox
        element.addEventListener("DOMMouseScroll", mouseWheelHandler, false);
    }
    // IE 6/7/8
    else element.attachEvent("onmousewheel", mouseWheelHandler);
}
addMouseWheelEvent(document, function() { alert("triggered"); });

最新更新