国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js 事件對象 鼠標滾輪效果演示說明

2019-11-21 00:27:37
字體:
來源:轉載
供稿:網友

[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
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青海省| 勃利县| 长春市| 东山县| 永济市| 兴隆县| 克山县| 琼结县| 新丰县| 攀枝花市| 凯里市| 荣昌县| 安阳县| 沙河市| 武陟县| 凤阳县| 海盐县| 盘山县| 北辰区| 京山县| 丹阳市| 丰宁| 定安县| 林西县| 定陶县| 抚松县| 玉屏| 根河市| 伊通| 洪雅县| 城固县| 合作市| 海淀区| 凯里市| 通州市| 大同县| 无棣县| 涿鹿县| 托克逊县| 习水县| 习水县|