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

时间:2014-05-28 14:05:33

标签: javascript internet-explorer internet-explorer-8

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

在IE8 document.createEvent == undefined中,尝试了这一点,但没有成功:

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

我想在IE7~9中开火和听鼠标滚轮事件。

任何指针都会有所帮助,谢谢。

3 个答案:

答案 0 :(得分:0)

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

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

检查document.createEvent if(document.createEvent)的存在并执行上述或

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

有关更多参数,请参阅http://msdn.microsoft.com/en-us/library/windows/apps/hh453179.aspx

答案 1 :(得分:0)

这在IE 8和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);

    }
}

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

我用来添加事件处理程序的代码也在下面供参考:

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"); });

答案 2 :(得分:-1)

看起来,就IE8支持而言,你可能会失去运气。我找到了相当多的证据(Microsoft/GoogleMozillaFacebook)IE8实现了鼠标滚轮/滚动事件的处理方式,使您无法工作他们周围。