js 滚轮事件

js滚轮事件

目前不同浏览器的滚轮事件如下:

事件浏览器
wheelChrome(31+), FF(17+), IE(9+)
mousewheelChrome, IE(6+), Opera, Safari
MozMousePixelScrollFF(3.5 only!) (2010-2013)
DOMMouseScrollFF(0.9.7+) since 2003

因此通用的滚轮事件有3个:wheel/mousewheel/DOMMouseScroll
为此可以封装一个获取滚轮事件的方法:

 function getMouseEvent(event) {
	return "onwheel" in document.createElement("div") ? "wheel" :
              document.onmousewheel !== undefined ? "mousewheel" : 
              "DOMMouseScroll"; 
 }

以下是不同浏览器对应的滚轮事件属性:

event.wheelDeltaevent.detai
Safari v5/OS X-1200
Safari v5/Win7-1200
Chrome v17/OS X-1200
Chrome v17/Win7-1200
IE9/Win7-120undefined
Firefox v4/OS Xundefined1
Firefox v4/Win7undefined3

通用滚轮事件封装:

var PIXEL_STEP  = 10;
var LINE_HEIGHT = 40;
var PAGE_HEIGHT = 800;
function normalizeWheel(event) {
  var sX = 0, sY = 0, 
      pX = 0, pY = 0; 

  if ('detail'      in event) { sY = event.detail; }
  if ('wheelDelta'  in event) { sY = -event.wheelDelta / 120; }
  if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; }
  if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; }

  if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {
    sX = sY;
    sY = 0;
  }

  pX = sX * PIXEL_STEP;
  pY = sY * PIXEL_STEP;

  if ('deltaY' in event) { pY = event.deltaY; }
  if ('deltaX' in event) { pX = event.deltaX; }

  if ((pX || pY) && event.deltaMode) {
    if (event.deltaMode == 1) {          // delta in LINE units
      pX *= LINE_HEIGHT;
      pY *= LINE_HEIGHT;
    } else {                             // delta in PAGE units
      pX *= PAGE_HEIGHT;
      pY *= PAGE_HEIGHT;
    }
  }

  if (pX && !sX) { sX = (pX < 1) ? -1 : 1; }
  if (pY && !sY) { sY = (pY < 1) ? -1 : 1; }

  return { spinX  : sX,
           spinY  : sY,
           pixelX : pX,
           pixelY : pY };
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值