js鼠标滚轮事件兼容

JavaScript鼠标滚轮事件

   IE6.0首先实现了鼠标的滚轮事件,其良好的交互效果得到认可,随后Opera、chrome、safari等主流浏览器都实现了该效果,不过存在着很大的兼容问题。

   大多数浏览器支持mousewheel事件操作,它可以在任何元素上触发,最终冒泡到document或window对象;而在Firefox中,支持的是另外一种事件——DOMMouseScroll,其中最为特殊的是它必须用addEventListener方法实现,故一般进行如下处理

       //设触发的函数为fn
       if(oDiv.addEventListener) {
            oDiv.addEventListener('DOMMouseScroll',fn,false);
        }
       oDiv.onmousewheel = fn;

   mousewheel触发事件会有一个特殊的事件属性——wheelDelta,当用户向前滚动是,它的值是120的倍数,向后滚动时,它的值是-120的倍数。不过在Opera9.5之前的版本中,正负号是颠倒的;在Firefox中,并没有wheelDelta属性,而是detail属性,与wheelDelta相比较,它不仅正负号颠倒,其值是3的倍数。为了兼容正负号颠倒的问题,可以采取设定布尔值的解决方法。

  //这是一个通过鼠标滚轮改变div高度的函数
             function fn(ev) {
              var ev = ev || event;
              var b = true;
              if( ev.wheelDelta ) {
                  b = ev.wheelDelta>0?true:false;
              } else {
                  b = ev.detail<0?true:false;
              }
             
             if( b ) {
                 oDiv.style.height = oDiv.offsetHeight - 10 +'px';
             } else {
                 oDiv.style.height = oDiv.offsetHeight + 10 +'px';
             }
         }  

  在该函数中,向上滚动b为true,向下滚动b为false。

 

  然而,如果页面有滚动条的话,在div上滚动滚轮的时候,会触发浏览器的默认事件。通常,我们用return false处理,可在addEventListener中,需要使用preventDefault函数来消除浏览器的默认事件。


 //在上述fn函数的末尾加消除浏览器默认事件的操作
          if( ev.preventDefault ) {
                 ev.preventDefault();
             }
 
             return false;


  以上可以解决鼠标滚轮事件带来的大部分兼容问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隐秀_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值