可恶的滚轮事件 - pod4g/tool GitHub Wiki

测试时间:2016-08-04

测试环境:MAC、windows7、windows10

1. onmousewheel

支持的浏览器有Chrome/Opera/Safari/Edge/IE7/8/9/10/11

用MAC触摸板也能触发此事件

用触摸板触发此事件时:

Safari的事件执行频率较低,手指在触摸板上移动一次触发一次 Chrome/Opera/Edge/IE7/8/9/10/11的事件执行频率很高,手指放开(由于弹性滚动)也会触发N次

上述浏览器在用鼠标滚轮时触发频率是一致的(都是滚轮滚一小段距离就触发一次事件,这个距离具体是多少?各个浏览器是否一致?我没有深究,从感觉上来说,距离都差不多)。

e.wheelDelta > 0 向上滚动

e.wheelDelta < 0 向下滚动

注:在Chrome/Opera/Edge/IE中,wheelDelta的值为120的倍数

  在Safari中,wheelDelta的值为12的倍数

https://developer.mozilla.org/zh-CN/docs/DOM/DOM_event_reference/mousewheel

微软给的例子

2. DOMMouseScroll

只有Firefox支持的事件。无e.wheelDelta属性。有e.detail属性

3. wheel

DOM3标准。IE9+/Firefox17+ 都支持该事件。

在标准中,垂直滚动距离为 e.deltaY

4. 简单兼容

function wheel(dom, handler){
        if(!-[1,]){ // IE8-
            dom.attachEvent('onmousewheel', handler);
        }else{
            dom.addEventListener('wheel', handler);
        }
  }

https://developer.mozilla.org/zh-CN/docs/Web/API/MouseWheelEvent