平時我們兼容什麼東西總是在調整低版本IE的兼容性,但是這回不是因為低版本浏覽器不給力。而是因為火狐給力過頭了,完全不顧其它浏覽器的感受標新立異了。除了火狐之外,所有的浏覽器都可以使用MouseWheel事件來處理鼠標滾輪的響應。但是火狐卻偏偏不支持MouseWheel,而使用無厘頭的DOMMouseScroll,這玩意兒除了火狐以外其它浏覽器都不兼容。也就是說,對於鼠標滾輪事件的處理,火狐只能使用DOMMouseScroll。而非火狐則只能使用MouseWheel。這兩種事件實現的原理不同,他們處理的數據也不同。
var firefox = navigator.userAgent.indexOf('Firefox') != -1; firefox ? img.addEventListener('DOMMouseScroll', MouseWheel, false) : (img.onmousewheel = MouseWheel); function MouseWheel(e) { e = e || window.event; if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; if (e.preventDefault) e.preventDefault(); else e.returnValue = false; }
我們來看個完整的代碼
<!DOCTYPE html> <style> span {font:14px/20px 微軟雅黑;} #counter { width:50px;height:20px; border:1px solid #CCC; background:#F9F9F9; font:14px/20px Consolas; text-align:center; margin:10px; } </style> <span>使用鼠標滾輪調整數值大小</span><br/> <div id="counter">0</div> <script> //判斷浏覽器 var isIE=navigator.userAgent.match(/MSIE (\d)/i); isIE=isIE?isIE[1]:undefined; var isFF=/FireFox/i.test(navigator.userAgent); //獲取元素 var counter=document.getElementById("counter"); //鼠標滾輪事件 if(isIE<9) //傳統浏覽器使用MouseWheel事件 counter.attachEvent("onmousewheel",function(){ //計算鼠標滾輪滾動的距離 //一格3行,每行40像素,所以除以120 var v=event.wheelDelta/120; counter.innerHTML=counter.innerHTML*1+v; //阻止浏覽器默認方法 return false; }); else if(!isFF) //除火狐外的現代浏覽器也使用MouseWheel事件 counter.addEventListener("mousewheel",function(e){ //計算鼠標滾輪滾動的距離 var v=e.wheelDelta/120; counter.innerHTML=counter.innerHTML*1+v; //阻止浏覽器默認方法 e.preventDefault(); },false); else //奇葩的火狐使用DOMMouseScroll事件 counter.addEventListener("DOMMouseScroll",function(e){ //計算鼠標滾輪滾動的距離 //一格是3行,但是要注意,這裡和像素不同的是它是負值 var v=-e.detail/3; counter.innerHTML=counter.innerHTML*1+v; //阻止浏覽器默認方法 e.preventDefault(); },false); </script>
以上所述就是本文的全部內容了,希望大家能夠喜歡。