js實現的相容所有瀏覽器的滑鼠中鍵滾動事件
現在的滑鼠基本都會有滑鼠中鍵,滾動這個中鍵也會觸發一個事件,但是這個事件具有很大的瀏覽器相容性問題,下面就通過程式碼例項介紹一下如何利用javascript實現相容所有主流瀏覽器的滑鼠中鍵效果。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html><html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> #thediv{ width:100px; height:100px; background:red; } </style> <script type="text/javascript"> function getData(event){ var ev=event||window.event; var data=(-ev.detail/3)||(ev.wheelDelta/120); this.style.width=(this.offsetWidth+data)+"px"; this.style.height=(this.offsetHeight+data)+"px"; } function done(el,fn){ if(document.addEventListener&&document.mozHidden!==undefined){ el.addEventListener("DOMMouseScroll",fn,false); } else if(document.addEventListener&&document.mozHidden==undefined){ el.addEventListener("mousewheel",fn,false) } else{ el.attachEvent('onmousewheel',fn) } } window.onload=function(){ var odiv=document.getElementById("thediv"); done(odiv,getData); } </script> </head> <body> <div id="thediv"></div> </body> </html>
上面的程式碼能夠實現拖動滑鼠地中鍵能夠調節div元素的尺寸。
一.實現原理:
滑鼠中鍵事件存在較低的瀏覽器相容性問題,IE瀏覽器支援mousewheel事件,但是火狐瀏覽器並不支援這個事件,而是採用DOMMouseScroll事件。註冊事件處理函式的時候也要需要特別注意,火狐的DOMMouseScroll事件只能夠使用addEventListener()進行註冊。在IE和谷歌中使用event.wheelDelta返回每滾動一次滑鼠中鍵獲值,這個值是永遠是120的倍數,向上滾動滑鼠中鍵,獲取的是正值,向下滾動獲取的是負值。在獲取中有所不同,event.detail獲取滾動的值,這個值永遠是3的倍數,和IE和谷歌相反的是,向上滾動獲取的是負值,向下滾動獲取的是正值。
二.程式碼註釋:
1.function getData(event){},要傳遞的事件處理函式,引數是物件,它完成了調節尺寸效果。2.var ev=event||window.event,獲取事件物件,採用了相容性寫法。
3.var data=(-ev.detail/3)||(ev.wheelDelta/120),實現了在各個瀏覽器滾動滑鼠中鍵,調節尺寸統一的效果,-ev.detail/3這個是為了讓返回值正負統一。
4.this.style.width=(this.offsetWidth+data)+"px",設定元素的寬度。
5.this.style.height=(this.offsetHeight+data)+"px",設定元素的高度。
6.function done(el,fn){},封裝註冊事件處理函式,第一個引數是元素物件,第二個是事件處理函式。
7.if(document.addEventListener&&document.mozHidden!==undefined){el.addEventListener("DOMMouseScroll",fn,false);},判斷是否是獲取瀏覽器,如果是則進行相應的操作。document.mozHidden在其他瀏覽器中返回值是undefined,在火狐中返回布林值。
8.else if(document.addEventListener&&document.mozHidden==undefined){el.addEventListener("mousewheel",fn,false)},判斷非火狐的標準瀏覽器,然後進行相應的操作。
9.else{el.attachEvent('onmousewheel',fn)},為IE8和IE8以下瀏覽器註冊事件處理函式。
10.window.onload=function(){},文件內容完全載入完畢再去執行函式中的程式碼。
11.var odiv=document.getElementById("thediv"),獲取元素物件。
12.done(odiv,getData),註冊事件處理函式。
相關文章
- JavaScript滑鼠中鍵滾動事件JavaScript事件
- 滑鼠右鍵相容MAC版火狐瀏覽器Mac瀏覽器
- 瀏覽器滑鼠事件瀏覽器事件
- forEach()相容所有瀏覽器瀏覽器
- 各大瀏覽器滾動條相容性問題瀏覽器
- 相容所有瀏覽器array物件indexOf()方法瀏覽器物件Index
- Javascript滑鼠滾輪事件相容寫法JavaScript事件
- 如何利用 Chrome 瀏覽器實現滾動截圖Chrome瀏覽器
- js 在瀏覽器中的event loop事件佇列JS瀏覽器OOP事件佇列
- 瀏覽器中的事件迴圈瀏覽器事件
- 瀏覽器滾動條高度的獲取瀏覽器
- JS實現瀏覽器列印WordJS瀏覽器
- 瀏覽器原生支援平滑滾動瀏覽器
- js中css樣式相容各個瀏覽器寫法JSCSS瀏覽器
- 關於UC瀏覽器相容scroll事件問題瀏覽器事件
- 理解瀏覽器和node.js中的Event loop事件迴圈瀏覽器Node.jsOOP事件
- 一鍵隱藏所有固定的瀏覽器擴充套件瀏覽器套件
- 瀏覽器/nodeJS 中的事件環工作原理瀏覽器NodeJS事件
- JQuery4:滑鼠事件和滾動事件jQuery事件
- IE瀏覽器相容瀏覽器
- 9:瀏覽器相容瀏覽器
- 瀏覽器事件迴圈機制與Vue nextTick的實現瀏覽器事件Vue
- react頁面中遮蔽瀏覽器預設右鍵事件React瀏覽器事件
- chrome,firfox,IE實現隱藏滾動條但是可以正常滾動(瀏覽器自帶隱藏屬性實現)Chrome瀏覽器
- 1.21 JQuery4:滑鼠事件與滾動事件jQuery事件
- 導航的瀏覽器相容問題瀏覽器
- 關於瀏覽器相容瀏覽器
- 瀏覽器相容性瀏覽器
- JS IOS/iPhone的Safari瀏覽器不相容Javascript中的Date()問題如何解決JSiOSiPhone瀏覽器JavaScript
- 瀏覽器的事件環機制瀏覽器事件
- 使用瀏覽器事件瀏覽器事件
- 瀏覽器事件解析瀏覽器事件
- 瀏覽器和Node.js中的Event Loop瀏覽器Node.jsOOP
- JS在瀏覽器中的執行機制JS瀏覽器
- js:返回到頁面時滾動到上次瀏覽位置JS
- 監聽瀏覽器的後退事件瀏覽器事件
- 如何優雅地實現瀏覽器相容與CSS規則回退瀏覽器CSS
- 理解瀏覽器和nodeJs中的事件迴圈(Event Loop)瀏覽器NodeJS事件OOP
- js事件迴圈機制 EventLoop 【瀏覽器和node】JS事件OOP瀏覽器