多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > jscript > 淺談 Mousewheel 事件

淺談 Mousewheel 事件

來源:程序員人生   發布時間:2014-03-24 01:17:01 閱讀次數:2688次

當需要制作轉動鼠標滾輪放大頁面字體這樣的交互效果時,會用到 Mousewheel 事件。其實在大多數瀏覽器(IE6, IE7, IE8, Opera 10+, Safari 5+)中,都提供了 “mousewheel” 事件。但杯具的是 Firefox 3.5+ 卻不支持此事件,不過慶幸 Firefox 3.5+ 中提供了另外一個等同的事件:”DOMMouseScroll” (事件和事件屬性的測試案例)。

OK,我們現在已經知道了不同瀏覽器之間實現的差別,兼容代碼如下:

var addEvent = (function(){
if (window.addEventListener) {
return function(el, sType, fn, capture) {
el.addEventListener(sType, fn, (capture));
};
} else if (window.attachEvent) {
return function(el, sType, fn, capture) {
el.attachEvent("on" + sType, fn);
};
} else {
return function(){};
}
})(),
// isFirefox 是偽代碼,大家可以自行實現
mousewheel = isFirefox ? "DOMMouseScroll" : "mousewheel";

// object 也是偽代碼,你需要注冊 Mousewheel 事件的元素
addEvent(object, mousewheel, function(event){
event = window.event || event;
// todo something
}, false);

我們再回到要實現的交互效果上,現在還有其他一些問題需要來解決:

  1. 頁面字體到底是放大還是縮小呢? ==> 鼠標滾輪是向上滾動還是向下滾動呢?
  2. 頁面字體縮放的倍數到底是多少呢? ==> 鼠標滾輪滾動的幅度大小是多少呢?

還好,我們可以通過 event 的某些屬性值得到這些信息:

  1. “mousewheel” 事件中的 “event.wheelDelta” 屬性值:返回的值,如果是正值說明滾輪是向上滾動,如果是負值說明滾輪是向下滾動;返回的值,均為 120 的倍數,即:幅度大小 = 返回的值 / 120。
  2. “DOMMouseScroll” 事件中的 “event.detail” 屬性值:返回的值,如果是負值說明滾輪是向上滾動(與 “event.wheelDelta” 正好相反),如果是正值說明滾輪是向下滾動;返回的值,均為 3 的倍數,即:幅度大小 = 返回的值 / 3。
  3. “mousewheel” 事件在 Opera 10+ 中卻是個特例,既有 “event.wheelDelta” 屬性,也有 “event.detail” 屬性。

注:上面第三點,在《The onmousewheel event of JavaScript》一文中有這樣一段批注:

In Opera, “detail” returns the same value as it does in FF, so for the big O you should rely on “detail” instead of “wheelDelta”, which depending on the Opera version may return a different value than in IE’s.

但經測試, Opera 9+ 和 Opera 10+ 中的 event.wheelDelta 屬性與其他瀏覽器中的表現完全一致,未發現異常與錯誤,從接口角度來說,代碼中應優先使用 “event.wheelDelta” 屬性。

此時代碼如下:

var addEvent = (function(){
if (window.addEventListener) {
return function(el, sType, fn, capture) {
el.addEventListener(sType, fn, (capture));
};
} else if (window.attachEvent) {
return function(el, sType, fn, capture) {
el.attachEvent("on" + sType, fn);
};
} else {
return function(){};
}
})(),
stopEvent: function(event) {
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}

if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
},
zoomIn = function(){},
zoomOut = function(){},
// isFirefox 是偽代碼,大家可以自行實現
mousewheel = isFirefox ? "DOMMouseScroll" : "mousewheel";

// object 是偽代碼,你需要注冊 Mousewheel 事件的元素
addEvent(object, mousewheel, function(event){
var delta = 0;
event = window.event || event;
stopEvent(event);

delta = event.wheelDelta ? (event.wheelDelta / 120) : (- event.detail / 3);
// zoomIn, zoomOut 是偽代碼,需要實現的縮放事件
delta > 0 ? zoomIn(delta): zoomOut(Math.abs(delta));
} , false);

事件和事件屬性的測試案例:http://www.planabc.net/demo/event/mousewheel.html

擴展閱讀:

  • 《Mouse wheel programming in JavaScript》

原文鏈接:點擊這里

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品国产三级国产专区5o | 最近中文字幕在线观看 | 欧美色综合久久 | 91精品日韩 | xxxx tube hd人妖| 亚洲人和日本人jzz护士 | 女人一级毛片免费观看 | 亚洲国产精品嫩草影院久久 | 国产精品久久久久久久y | 三级中文字幕永久在线视频 | 亚洲成人在线免费观看 | 在线观看中文字幕亚洲 | 免费看一级毛片欧美 | 亚洲成人高清 | 精品国产一区二区三区不卡在线 | 韩国精品一区二区久久 | 国产午夜永久福利视频在线观看 | 国产亚洲精品精品国产亚洲综合 | 经典三级一区二区三区视频 | 看v片| 国产九色 | 最新自拍偷拍 | 在线看黄色网址 | 亚洲欧美色中文字幕 | 天天综合久久 | 欧美激情伦妇在线观看 | 高清日本一级特黄aa大片 | 欧美色成人tv在线播放 | 手机看片福利视频 | 欧美最猛性xxxx高清 | 宇都宫紫苑乳在线观看 | 国产高清成人吃奶成免费视频 | 欧美成人黄色小说 | 日韩专区亚洲综合久久 | 黄色ab| 91精品一区二区综合在线 | 欧美三级艳星xxxxxx | 免费一级欧美性大片 | 超刺激福利丝袜网站 | 二级毛片在线观看 | 成人久久久久 |