繁体   English   中英

如何使用 JavaScript 在 Firefox 中触发鼠标滚轮事件?

[英]How to fire mouse wheel event in Firefox with JavaScript?

我正在尝试使用 WebDriver 进行自动化测试,但它目前无法模拟鼠标滚轮事件。 作为一种解决方法,我尝试使用 JavaScript 来触发这些事件。 我现在正在一个直接的 HTML 页面上做我所有的轮子试验,而不是在 WebDriver 框架内。

我特别想在滚动的 div 元素上触发鼠标滚轮事件。

到目前为止,我已经能够使用 Chrome 和 IE9 做到这一点,但我似乎无法在 Firefox (5.x) 中得到任何工作。

我正在使用以下跨浏览器代码来检测鼠标滚轮事件何时被触发,这是我从网上截获的。 当我在我创建的滚动 div (id='view') 中滚动鼠标滚轮时,此代码能够在所有浏览器中获取事件。

<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>

下面的 function 在调用时能够在 Chrome 和 IE9 中触发鼠标滚轮事件,并在上述处理程序中以预期的行为被拾取。

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

当然,它不适用于 Firefox。 我发现现有的文档太稀少和令人困惑,不知道 FF 如何处理这个问题。 谁能告诉我在 Firefox 中触发鼠标滚轮事件的最低限度,带有滚轮增量(放置在 Firefox 期望它的位置),这样我的处理程序就会拿起它?

出色地,

  1. 在代码的 Mozilla 部分,如果您正在侦听 DOMMouseScroll 您也应该调度 DOMMouseScroll 事件,不是吗? (鼠标滚轮似乎是被 webkit 抄袭的微软发明,而不是 Gecko )。
  2. 您应该调用适当的init...()方法,而不是在事件上设置(只读)属性,该方法对于鼠标事件是initMouseEvent() 规格

这是一个固定的测试用例,适用于 Firefox: http://jsfiddle.net/6nnMV/

可能对您没有用,但可能对希望模拟事件的其他人感兴趣,以下是 mozilla 中的(特权)单元测试如何模拟“真实”事件: http://hg.mozilla.org/mozilla-central/annotate/ a666b4f809f0/testing/mochitest/tests/SimpleTest/EventUtils.js#l248

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM