JavaScript滑鼠中鍵滾動事件
在實際應用中,滑鼠的一些事件非常常用,例如,onclick事件、onmouseover事件等,這裡就不介紹了,具體可以參閱javascript click事件和javascript mouseover事件一章節。 還有一種事件比較少用,那就是滑鼠中鍵滾輪滾動事件,下面就通過程式碼例項簡單介紹一下中鍵滾輪事件。
IE瀏覽器和谷歌瀏覽器支援mousewheel事件,也就是滑鼠中鍵滾動事件,但是遺憾的是火狐瀏覽器並不支援此事件,而是支援DOMMouseScroll事件,下面就這兩個做一下簡單的分析對別:
一.mousewheel事件:
event.wheelDelta返回值是120的倍數,如果屬性值為正數則是向上滾動,如果是負數則是向下滾動。
滾動幅度的大小等於event.wheelDelta/120。
二.DOMMouseScroll事件:
event.detail返回值都是3的倍數,和event.wheelDelta相反,如果屬性值為負數,則是向上滾動,如果是正數則是向下滾動。
特別注意:
DOMMouseScroll不支援前面加"on"事件註冊方式,例如obj.onclick=funcion(){}。
下面對上面做一下相容性處理,以達到在任何瀏覽器中都可以順利執行。
程式碼例項如下:
[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-color:red } </style> <script type="text/javascript"> var addEvent=(function(){ var _eventCompat=function(event){ var type=event.type; if(type=='DOMMouseScroll'||type=='mousewheel'){ event.delta=(event.wheelDelta)?event.wheelDelta/120:-(event.detail||0)/3; } if(event.srcElement&&!event.target){ event.target=event.srcElement; } if(!event.preventDefault&&event.returnValue!==undefined){ event.preventDefault=function(){ event.returnValue=false; }; } return event; }; if(window.addEventListener){ return function(el, type, fn, capture){ if(type==="mousewheel"&&document.mozHidden!==undefined){ type="DOMMouseScroll"; } el.addEventListener(type,function(event){ fn.call(this, _eventCompat(event)); },capture||false); } } else if(window.attachEvent){ return function(el, type, fn, capture){ el.attachEvent("on" + type, function(event){ event = event || window.event; fn.call(el, _eventCompat(event)); }); } } return function(){}; })(); window.onload=function(){ var height=100; var width=100; var thediv=document.getElementById("thediv"); function size(event){ width=width+event.delta; height=height+event.delta; thediv.style.width=width+"px"; thediv.style.height=height+"px"; } addEvent(thediv,"mousewheel",size,false); } </script> </head> <body> <div id="thediv"></div> </body> </html>
當滑鼠放在div中時候,滾動滑鼠中鍵能夠縮放div的大小,下面介紹一下實現過程:
一.實現原理:
程式碼看上去稍顯複雜,其實特別的簡單,就是根據在不同瀏覽器中,相關事件的特點,進行了一些相容性處理,這是必然的操作,這裡就不多介紹了,大家直接看程式碼註釋可以瞭解相關細節。
二.程式碼註釋:
1.var addEvent=(function(){})(),宣告一個變數,它的值就是匿名函式的返回值,這個返回值就是一個函式物件。
2.var _eventCompat=function(event){})(),宣告一個變數,它的值是一個匿名函式,此匿名函式能夠封裝一個事件物件,對時間物件的屬性做一些相容性處理,此函式的引數就是事件物件。
3.var type=event.type,將事件型別型別賦值給變數type。
4.if(type=='DOMMouseScroll'||type=='mousewheel'),如果事件型別是'DOMMouseScroll'或者'mousewheel'。
5.event.delta=(event.wheelDelta)?event.wheelDelta/120:-(event.detail||0)/3,delta是一個事件物件的自定義屬性,如果支援event.wheelDelta屬性(谷歌和IE瀏覽器)則使用event.wheelDelta/120,這會得到滾動的幅度,event.wheelDelta的返回值都是120的倍數,如果在火狐瀏覽器下,則使用(event.detail||0)/3,event.detail的返回值是3的倍數。
6.if(event.srcElement&&!event.target) ,如果事件物件支援srcElement屬性且不支援target屬性,這說明是IE8和IE8以下瀏覽器。
7.event.target=event.srcElement,將target屬性值修改為event.srcElement。
8.if(window.addEventListener) ,如果支援addEventListener函式,也就是谷歌、火狐或者IE8以上瀏覽器。
9.return function(el, type, fn, capture){},返回一個函式物件,此函式具有四個引數,第一個引數是要註冊事件處理函式的物件,第二個是事件型別,第三個是事件處理函式,第四個是一個布林值,用來說明是捕獲型別還是冒泡型別。
10.if(type==="mousewheel"&&document.mozHidden!==undefined){type="DOMMouseScroll"} 如果是火狐瀏覽器,則將type值設定為DOMMouseScroll。document.mozHidden在火狐瀏覽器中是個布林值,在谷歌和IE瀏覽器中返回值是undefined。
11.el.addEventListener(type,function(ev){},capture||false)註冊事件處理函式。
12.fn.call(this, _eventCompat(ev));,將函式fn的呼叫物件設定為el,引數為一個封裝好的事件物件,引數ev是原始的事件物件。
相關閱讀:
(1).target屬性參閱javascript event.target一章節。
(2).preventDefault參閱javascript preventDefault()一章節。
(3).addEventListener參閱addEventListener()和attachEvent()函式的用法一章節。
相關文章
- Javascript滑鼠滾輪事件相容寫法JavaScript事件
- JQuery4:滑鼠事件和滾動事件jQuery事件
- 1.21 JQuery4:滑鼠事件與滾動事件jQuery事件
- 滑鼠、鍵盤事件事件
- tkinter中滑鼠與鍵盤事件(十五)事件
- win10 禁用滑鼠滾輪按鍵熱鍵方法 win10怎麼禁用滑鼠滾輪按鍵Win10
- 滑鼠滑輪上下滾動設定方法_怎樣設定滑鼠上下滾動
- 移動端點透事件--阻止滾動事件事件
- QGraphicsScene中捕捉滑鼠事件CSS事件
- 禁用input輸入框的滑鼠滾輪事件詳解事件
- JavaScript和JQuery的滑鼠mouse事件冒泡處理JavaScriptjQuery事件
- 如何讓VB6程式碼編輯器垂直滾動條隨滑鼠滾輪滾動
- 直播平臺製作,禁止頁面滾動 / 滾動事件穿透事件穿透
- 滑鼠事件事件
- 「MacOS滑鼠操作技巧」如何設定滑鼠”的速度、滾動方向等配置?Mac
- vue監聽頁面中的某個div的滾動事件,並判斷滾動的位置Vue事件
- vue 監聽頁面滾動事件Vue事件
- angular 監聽 Windows 滾動事件 實現頁面滾動載入AngularWindows事件
- JavaScript無縫滾動 記錄JavaScript
- win10電腦中滑鼠自動向下或向上滾動怎麼解決Win10
- c++ 鍵盤/滑鼠互動C++
- Smooze for Mac(滑鼠平滑滾動神器)1.9.26漢化版Mac
- 滑鼠拖拽事件事件
- 如何使用 JavaScript 程式碼建立虛擬滑鼠點選事件JavaScript事件
- 前端筆記之JavaScript(十一)event&BOM&滑鼠/盒子位置&拖拽/滾輪前端筆記JavaScript
- JavaScript水平無縫滾動程式碼JavaScript
- JavaScript 滾動條定位指定位置JavaScript
- JavaScript自定義滾動條詳解JavaScript
- Javascript中自定義事件JavaScript事件
- JavaScript滑鼠拖動調整div大小JavaScript
- JavaScript拖動滑鼠繪製矩形方框JavaScript
- 監聽滑鼠事件事件
- angular 的滑鼠事件Angular事件
- 事件 滑鼠事件 表單事件 from表單事件
- Javascript中的事件物件和事件型別JavaScript事件物件型別
- mac滑鼠平滑滾動工具:Mac Mouse Fix for Mac中文版Mac
- Python-模擬滑鼠鍵盤動作Python
- win10滑鼠滾輪上下失靈怎麼辦_win10滑鼠滑輪滾動沒反應的解決方法Win10