2013-02-17 6 views
17

Ich möchte sauberes und nettes JavaScript für mousewheel -Ereignis haben, das nur die neueste Version gängiger Browser ohne veralteten Code für veraltete Versionen ohne JS-Framework unterstützt.Mousewheel-Ereignis in modernen Browsern

Mousewheel Ereignis ist schön erklärt here. Wie vereinfacht man es für die aktuellsten Versionen der Browser?

Ich habe keinen Zugang zu allen Browsern, um es zu testen, also caniuse.com ist eine große Hilfe für mich. Leider wird Mausrad dort nicht erwähnt.

Basierend auf Dereks Kommentar schrieb ich diese Lösung. Ist es für alle Browser gültig?

someObject.addEventListener("onwheel" in document ? "wheel" : "mousewheel", function(e) { 
    e.wheel = e.deltaY ? -e.deltaY : e.wheelDelta/40; 
    // custom code 
}); 
+2

Chrome und IE-Unterstützung [ 'MouseWheelEvent'] (https://developer.mozilla.org/en-US/docs/DOM/MouseWheelEvent), während Firefox unterstützt [' WheelEvent'] (https: // developer.mozilla.org/en-US/docs/DOM/WheelEvent). Weitere Informationen über den Browser finden Sie unter [hier] (https://developer.mozilla.org/en-US/docs/Mozilla_event_reference/wheel#Listening_to_this_event_across_browser). –

+0

* "Ist es für alle Browser gültig?" *. Kannst du es nicht selbst testen? –

+1

Hinzugefügt Dereks Punkt. In diesen Fällen sollten Sie die Browserkompatibilität wirklich prüfen. Sie können das mit Modernizr (http://www.modernizr.com) tun. Es wird Ihr Leben viel einfacher machen. –

Antwort

25

Hier ist ein Artikel, der diese beschreibt, und gibt ein Beispiel:

http://www.sitepoint.com/html5-javascript-mouse-wheel/

Relevante Code, minus des spezifischen Beispiel Ändern der Bildgröße angegeben:

var myitem = document.getElementById("myItem"); 
if (myitem.addEventListener) 
{ 
    // IE9, Chrome, Safari, Opera 
    myitem.addEventListener("mousewheel", MouseWheelHandler, false); 
    // Firefox 
    myitem.addEventListener("DOMMouseScroll", MouseWheelHandler, false); 
} 
// IE 6/7/8 
else 
{ 
    myitem.attachEvent("onmousewheel", MouseWheelHandler); 
} 

function MouseWheelHandler(e) 
{ 
    // cross-browser wheel delta 
    var e = window.event || e; // old IE support 
    var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))); 

    return false; 
} 
+1

Ausgezeichnete Antwort. Braucht mehr Aufmerksamkeit. Viele unvollständige Antworten zu diesem Thema, – Terrance00

1

Das Mausrad Ereignis ist Nicht-Standard und MDN recommend der wheel event.

var item = document.getElementById('item') 
item.addEventListener('mousewheel', function(e) { 
    console.log('event', e) 
}, false)