如何在Chrome和Firefox中运行滚动事件

How can get a scroll event work in Chrome and Firefox?

本文关键字:运行 滚动 事件 Firefox Chrome      更新时间:2023-09-26

我现在有一段代码:

canvas.onmousewheel = scroll;
function scroll(event) {
    event.preventDefault();
    var mousex = event.clientX - canvas.offsetLeft;
    var mousey = event.clientY - canvas.offsetTop;
    var wheel = parseInt(event.wheelDelta, 10) / 120; //n or -n
    var zoom = 1 + wheel / 2;
    [... do some action on canvas ...]
};

遗憾的是,这在Firefox中不起作用。根据MDN:

由于遗留事件,Gecko没有实施此事件的计划类型和非标准。

如何让我的代码适用于Chrome和Firefox?

edit:完整的代码在这里(一个文件,大约550 LOC)

您可以尝试以下链接

从页面:onmousewheel事件和Firefox的等效

var mousewheelevt=(/Firefox/i.test(navigator.userAgent))? "DOMMouseScroll" : "mousewheel" //FF doesn't recognize mousewheel as of FF3.x
if (document.attachEvent) //if IE (and Opera depending on user setting)
    document.attachEvent("on"+mousewheelevt, function(e){alert('Mouse wheel movement detected!')})
else if (document.addEventListener) //WC3 browsers
    document.addEventListener(mousewheelevt, function(e){alert('Mouse wheel movement detected!')}, false)

我遇到了这个问题,我编写了代码来根据浏览器使用不同的事件。当然jQuery或其他框架会很容易做到,但我是一个Vanilla Javascript程序员。

对于chrome:onmousewheeldocument.body.scrollTop有效
对于firefox:onscrollevent.pageY执行相同操作。

if( Browser.chrome){
    window.onmousewheel=function(e){      
      if( document.body.scrollTop > 60){
       /* code to run on scrolled window */
      } else {
      /* code to run when on top */
       }
    };
} else {
   window.onscroll=function(e){
     if(e.pageY > 60){
      /* code to run on scrolled window */
     } else {
      /* code to run when on top */
     }
  };
}

浏览器库位于http://software.sitesbr.net/utils/