JavaScriptローラー事件の互換性の書き方

2471 ワード

ローラー事件を研究しているのは、リフォームをしているfullpage.jsです.ローラー事件をモニターしてページをめくる必要があります.実現する過程でいくつかの互換性の問題が発生しました.ついでに一つの方法をカプセル化しました.後で起動しやすいです.しかし、W 3 Cはマウスホイールイベントの仕様を持っていません.各ブラウザメーカーは異なる実装方法を実装しています.イベントの属性も異なり、最も標準的なFireFoxと呼ばれています.プライベートでDOMMouseScrrollを実現しました.ただし、他のブラウザはすべてオンモスワールで実現しているので、互換性のある処理をするのは難しいです.
ブラウザ
実現方法
イベントのプロパティ
上にスクロール
下にスクロール
FireFox
DOMMouseScuroll
detail
-3の倍数
3の倍数
非FireFox
onmousewheel
wheelDelta
120の倍数
-120の倍数
FireFoxでは、DOMMouseScrrollは、例えば、element.addEvent Listener(「DOMMouseScrroll」、Fnc、false)と、addEvent.addEvent Listenerによって結合されなければならない.FireFoxではない限り、addEvent Listener方法のほかに、以下のコードが使えます.element.onmouseweeheel=function(){}パッケージコードは以下の通りです.
//       
//   :type      ,   "up"(    ) "down"(    )
function wheel(upFn, downFn) {
    // IE6
    window.onmousewheel = getWheelDalta;
    // Firefox
    if(window.addEventListener) {
        window.addEventListener("DOMMouseScroll", getWheelDalta, false);
    }
    //         
    function getWheelDalta(event) {
        var event = event || window.event;
        var delta = 0;
        // delta       ,      ;delta       ,      ;
        if (event.wheelDelta) {
            // IE ,         wheelDelta   ;     ,wheelDelta   120   ;     ,wheelDelta   -120   ;
            delta = event.wheelDelta/120; 
            if (window.opera) delta = -delta;
        } else if (event.detail) {
            // Firefox          detail   ;    ,detail   -3   ;    ,detail   3   ;
            delta = -event.detail/3;
        }
        //         
        if(delta > 0) {
            upFn();
        }else {
            downFn();
        }

        //       ,                   
        prevent(event);
        function prevent(evt){
            if(evt.preventDefault){
                evt.preventDefault();
            }else{
                evt.returnValue = false;
            }
        }
    }   
}
テストの呼び出し:
function wheelUp() {
    alert("wheelUp");
}
function wheelDown() {
    alert("wheelDown");
}
wheel(wheelUp, wheelDown);
具体的には次の例を参照してください.See the Pen<a href=”http://codepen.io/dengzhirong/pen/VvmaaJ/「_」href="http://codepen.io/dengzhirong/pen/VvmaaJ/">VvmaaJby dengzhirong()http://codepen.io/dengzhirong“_href=”http://codepen.io/dengzhirong'@@dengzhirong)onhttp://codepen.io「_」href=「http://codepen.io>>CodePen