DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> js 事件對象 鼠標滾輪效果演示說明
js 事件對象 鼠標滾輪效果演示說明
編輯:關於JavaScript     

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]
先來看看各個浏覽器的兼容情況

IE 6,7,8
注冊事件使用 onmousewheel
取得滾動的值使用 event.wheelDelta
滾動步長 120
向下是負值,向上是正值
當鼠標在一個同一個坐標,並且滾輪不間斷滾動時,wheelDelta會按步長遞增
(比如 -240 -360 )


Firefox 3.5
注冊事件有兩個MozMousePixelScroll,DOMMouseScroll,但是它們不能使用element.onDOMMouseScroll方式注冊,必須使用addEventLinstener來監聽事件
Firefox沒有event.wheelDelta,它使用event.detail 來獲取滾動的信息(Firefox這點做的很奇怪)
event.detail 本身是用來記錄一個事件在原地(鼠標坐標不發生變化的情況下)執行了多少次的信息
而在DOMMouseScroll事件發生的時候,它的值通常是 3 和 -3
但是它的取值和IE正好相反, 向上是負,向下是正( 這個問題在代碼中需要做統一 )
為什麼說它的值通常是 3和-3呢,因為當你按住ctrl ,alt, shift 之後,再滑動鼠標滾輪,detail 的值就會成為 1和-1
而按住別的鍵,則正值有時還會變成6
總之在我看來是有點亂糟糟,


MozMousePixelScroll 據Mozilla說,是幾乎跟DOMMouseScroll一樣的事件,只不過更精確(到像素)
但是這個事件的detail值返回的非常奇怪,默認是51和-51,按住ctrl ,alt, shift 變成了 +- 17. @_@,所以它被華麗的無視了,我們不打算使用它


Chrome 和IE保持一致,但是它考慮到了橫向鼠標滾輪設備的情況,所以增加了兩個鼠標來分別獲取值

事件 onmousewheel
wheelDelta {number}
wheelDeltaX {number}
wheelDeltaY {number}

這次 Opera 又是集大成者,既有detail 取值也一樣是3,-3,又有wheelDelta,不過表現上倒是很一致
事件 onmousewheel
detail = {number}
wheelDelta = {number}



本來我們應該從Firefox支持的event.detail或者IE等支持的event.wheelDelta的取值中,選擇一個,然後把另一個通過計算做成統一的,
但是實際上我們只能通過這些值知道 是向上滾 還是向下滾,
所以為了方便,我們兩個都不取,通過計算把他們統一成 +1 和 -1.(這樣做也是為了實際應用中的運算方便);

對於IE,Chrome來說,直接除以120就可以搞定

Opera 同時支持wheelDelta和detail ,但是detail沒有wheelDelta同一位置遞增的能力,所以
我們首先優先判斷wheelDelta是否存在,如果存在,就使用wheelDelta,如果不存在再使用detail

由於firefox的鍵盤干擾,我們還需要對detail做一些過濾
首先用這個值跟3做取模運算 value % 3
說它是3的倍數,那麼返回值是0,我們就用value除以3後返回( 保證返回的值是+1 -1 )
如果返回值不是0,那說明這個值不是1就是-1,那就直接返回這個值

最後,由於Firefox返回值的規則是向上是負 向下是正,與平時的習慣不同,我們要將正負反轉過來,方法也很簡單,計算結果前面加一個負號就可以搞定
話說回來,對滾輪事件的支持情況firefox真是有點悶.

好了,分析了一大堆,其實代碼就幾句:
復制代碼 代碼如下:
function getWheelValue( e )
{
e = e||event;
return ( e.wheelDelta ? e.wheelDelta/120 : -( e.detail%3 == 0 ? e.detail : e.detail/3 ) );
}

最後說說未來的滾輪事件和API
在DOM3 Event 中
滾輪事件變得更為復雜(也支持更多的東西)
注冊的事件並沒有變,依然叫mousewheel
專門增加了兩枚滾輪事件對象
MouseWheelEvent
WheelEvents
而且支持了x,y,z三個軸向的滾輪值( 真復雜>_< )
感興趣可以瞧瞧這裡
http://www.w3.org/TR/DOM-Level-3-Events/#events-mousewheelevents
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved