wheel onwheel eventos event ejemplos crossbrowser javascript firefox javascript-events mousewheel dispatchevent

javascript - eventos - onwheel



¿Cómo disparar evento rueda de ratón en Firefox con JavaScript? (1)

Estoy intentando realizar pruebas automáticas con WebDriver, pero actualmente no tiene capacidad para simular eventos de la rueda del mouse. Como solución alternativa, estoy intentando disparar estos eventos con JavaScript en su lugar. Estoy haciendo toda mi rueda experimentando en una página HTML recta en este momento, no dentro del marco de WebDriver.

Estoy tratando específicamente de disparar un evento de la rueda del mouse en un elemento div de desplazamiento.

Hasta ahora he podido hacer esto con Chrome e IE9, pero parece que no consigo que nada funcione en Firefox (5.x).

Estoy usando el siguiente código de navegador cruzado para detectar cuándo se activan los eventos de la rueda del mouse, que me enganché de la red. Este código es capaz de recoger el evento en todos los navegadores cuando muevo la rueda del ratón dentro de la división de desplazamiento que he creado (id = ''ver'').

<script type="text/javascript"> function wheel(event) { var delta = 0; if (!event) { event = view.event; } if (event.wheelDelta) { delta = event.wheelDelta / 120; } else if (event.detail) { delta = -event.detail / 3; } alert(delta); } var view = document.getElementById(''view''); if (view.addEventListener) { view.addEventListener(''DOMMouseScroll'', wheel, false); } view.onmousewheel = wheel; </script>

La siguiente función, cuando se le llama, puede activar el evento de la rueda del mouse en Chrome e IE9, y se selecciona en el controlador anterior con el comportamiento esperado.

function ChromeWheel () { var evt = document.createEvent("MouseEvents"); evt.initEvent(''mousewheel'', true, true); evt.wheelDelta = 120; view.dispatchEvent(evt); }

Por supuesto, no funciona para Firefox. He encontrado que la documentación existente es demasiado escasa y confusa para saber cómo FF maneja esto. ¿Puede alguien mostrarme lo mínimo para disparar un evento de la rueda del mouse en Firefox con una rueda delta (colocada donde FF lo espera), de modo que mi manejador la recoja?


Bien,

  1. En la parte del código de Mozilla, si está escuchando DOMMouseScroll también debe enviar un evento DOMMouseScroll, ¿no? (Parece que mousewheel es un invento de Microsoft copiado por webkit, pero no por Gecko ).
  2. En lugar de establecer propiedades (de solo lectura) en el evento, se supone que debe llamar al método init...() apropiado, que para el evento del mouse es initMouseEvent() . ( spec )

Aquí hay un testcase fijo, que funciona en Firefox: http://jsfiddle.net/6nnMV/

Probablemente no sea útil para usted, pero puede ser de interés para otras personas que buscan simular eventos. A continuación le mostramos cómo las pruebas unitarias (privilegiadas) en Mozilla simulan eventos "reales": http://hg.mozilla.org/mozilla-central/annotate/a666b4f809f0/testing/mochitest/tests/SimpleTest/EventUtils.js#l248