首先咱們先看一張圖,看在各瀏覽器鼠標滾輪定義的事件和屬性有什麼不一樣。chrome
首先ie/chrome 里加鼠標滾輪事件的方法是 obj.onmousewheel=fn瀏覽器
而後在火狐瀏覽器裏firefox:經過事件綁定DOMMouseScroll事件spa
obj.addEventListener('DOMMouseScroll',mousewheel,false);firefox
//ie chrome obj.onmousewheel=fn; if(obj.addEventListener){ //火狐 obj.addEventListener('DOMMouseScroll',fn,false); }
//ie chrome obj.onmousewheel=fn; if(obj.addEventListener){ //火狐 obj.addEventListener('DOMMouseScroll',fn,false); } function fn(ev){ var oEvent=ev||event; console.log(oEvent.wheelDelta) //向上滾動爲120 //向下滾動爲-120 }
//ie chrome obj.onmousewheel=fn; if(obj.addEventListener){ //火狐 obj.addEventListener('DOMMouseScroll',fn,false); } function fn(ev){ var oEvent=ev||event; console.log(event.detail) //向上滾動爲-3 //向下滾動爲3 }
看到這裏咱們能夠看到ie/chrome和firefox裏鼠標滾動的值 的 寫法不同並且上下的值也是相反的 , 如今咱們該像以前事件那樣用判斷來作兼容,代碼:對象
//ie chrome obj.onmousewheel=fn; if(obj.addEventListener){ //火狐 obj.addEventListener('DOMMouseScroll',fn,false); } function fn(ev){ //處理上下的兼容性問題 var dir=true;//默認值 if(oEvent.wheelDelta){ //ie和chrome dir=oEvent.wheelDelta>0?true:false; }else{ //firefox dir=oEvent.detail<0?true:false; } //根據滾輪方向設定具體業務邏輯 if(dir){ //do something tyre爲滾輪向上 }else{ //do something false爲滾輪向下 } }
就是當頁面過長的時候,咱們操做div用滾輪滾動,咱們原本是想鼠標滾輪操做div的,但一樣也會觸發瀏覽器的默認滾動條,因此 咱們要阻止瀏覽器的默認行爲。blog
處理方法:事件
// addEventLisrener 綁定的時間須要經過event對象下面的的 preventDefaul if(oEvent.preventDefault){ oEvent.preventDefault(); } return false;//阻止默認行爲(阻止的是 obj.on時間名稱=fn 所觸發的默認行爲)
firefox用preventDefault(),ie/chrome用return false;get
window.onload=function(){ var oBox=document.getElementById('box'); //ie chrome document.onmousewheel=mousewheel; if(document.addEventListener){ //火狐 document.addEventListener('DOMMouseScroll',mousewheel,false); } function mousewheel(ev){ var oEvent=ev||event; //alert(oEvent.detail) //alert(oEvent.detail) //處理上下的兼容性問題 var dir=true; if(oEvent.wheelDelta){ dir=oEvent.wheelDelta>0?true:false; }else{ dir=oEvent.detail<0?true:false; } //根據手錶方向設定具體業務邏輯 if(dir){ oBox.style.height=oBox.offsetHeight-10+'px'; }else{ oBox.style.height=oBox.offsetHeight+10+'px'; } // addEventLisrener 綁定的時間須要經過event對象下面的的 preventDefaul if(oEvent.preventDefault){ oEvent.preventDefault(); } return false;//阻止默認行爲(阻止的是 obj.on時間名稱=fn 所觸發的默認行爲) } }