Mausrad-Ereignisse in jQuery abrufen?

Lesezeit: 6 Minuten

Mausrad Ereignisse in jQuery abrufen
diejh

Gibt es eine Möglichkeit, die Mausrad-Ereignisse (nicht die Rede von scroll Ereignisse) in jQuery?

  • Eine schnelle Suche ergab dieses Plugin das kann helfen.

    – Jerad Rose

    18. November 11 um 22:20 Uhr

  • Diese Lösung funktioniert für mich: stackoverflow.com/questions/7154967/jquery-detect-scrolldown

    – Albert Gan

    6. März 14 um 12:07 Uhr

  • @thejh hat dazu eine neue Antwort mit DOM3-Ereignissen gepostet: stackoverflow.com/a/24707712/2256325

    – Sergio

    14. Juli 14 um 13:00 Uhr

  • Mögliches Duplikat von jQuery scroll() erkennt, wenn der Benutzer aufhört zu scrollen

    – divy3993

    2. Februar 17 um 3:33 Uhr

  • Nur eine Anmerkung dazu. Wenn Sie nur Änderungen an einer Eingabe erkennen möchten und Änderungen über das Mausrad nicht erkannt werden, versuchen Sie es $(el).on('input', ...

    – rybo111

    24. Juni 18 um 9:54 Uhr

1644322991 805 Mausrad Ereignisse in jQuery abrufen
Mahdi Shahbazi

​$(document).ready(function(){
    $('#foo').bind('mousewheel', function(e){
        if(e.originalEvent.wheelDelta /120 > 0) {
            console.log('scrolling up !');
        }
        else{
            console.log('scrolling down !');
        }
    });
});

  • Der DOMMouseScroll event wird in FF verwendet, also müssen Sie auf beide hören .bind('DOMMouseScroll mousewheel') { ereignisse developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/…

    – e382df99a7950919789725ceeec126

    7. April 13 um 10:26 Uhr


  • e.originalEvent.wheelDelta ist in FF23 undefiniert

    – Hofnarwillie

    10. September 13 um 10:44 Uhr

  • Sie müssen nicht durch 120 teilen, das ist nutzlose CPU-Verschwendung

    – Gift

    30. September 13 um 11:21 Uhr

  • muss die beste Antwort gewesen sein

    Benutzer2869113

    13. Oktober 13 um 15:43 Uhr

  • Aber wieso willst du es durch 120 teilen? Was ist das für eine Konstante? (Sie müssen nicht, wie Venimus betonte.)

    – mshthn

    4. Oktober 15 um 20:44 Uhr

Mausrad Ereignisse in jQuery abrufen
Jesse Dupuy

Bindung an beide mousewheel und DOMMouseScroll hat bei mir am Ende sehr gut funktioniert:

$(window).bind('mousewheel DOMMouseScroll', function(event){
    if (event.originalEvent.wheelDelta > 0 || event.originalEvent.detail < 0) {
        // scroll up
    }
    else {
        // scroll down
    }
});

Diese Methode funktioniert in IE9+, Chrome 33 und Firefox 27.


Bearbeiten – März 2016

Ich habe mich entschieden, dieses Thema erneut zu behandeln, da es eine Weile her ist. Die MDN-Seite für das Scroll-Ereignis bietet eine großartige Möglichkeit, die verwendete Scroll-Position abzurufen requestAnimationFrame, was meiner vorherigen Erkennungsmethode sehr vorzuziehen ist. Ich habe ihren Code geändert, um neben der Bildlaufrichtung und -position eine bessere Kompatibilität zu gewährleisten:

(function() {
  var supportOffset = window.pageYOffset !== undefined,
    lastKnownPos = 0,
    ticking = false,
    scrollDir,
    currYPos;

  function doSomething(scrollPos, scrollDir) {
    // Your code goes here...
    console.log('scroll pos: ' + scrollPos + ' | scroll dir: ' + scrollDir);
  }

  window.addEventListener('wheel', function(e) {
    currYPos = supportOffset ? window.pageYOffset : document.body.scrollTop;
    scrollDir = lastKnownPos > currYPos ? 'up' : 'down';
    lastKnownPos = currYPos;

    if (!ticking) {
      window.requestAnimationFrame(function() {
        doSomething(lastKnownPos, scrollDir);
        ticking = false;
      });
    }
    ticking = true;
  });
})();

Siehe den Stift Vanilla JS Scroll-Tracking von Jesse Dupuy (@blindside85) an CodePen.

Dieser Code arbeitet derzeit in Chrome v50, Firefox v44, Safari v9, and IE9+

Verweise:

  • Das hat bei mir am besten funktioniert. Allerdings läuft dieses Skript per „Klick“ des Scrollrads. Dies kann für einige Skripte überwältigend sein. Gibt es eine Möglichkeit, jedes Scroll-Ereignis als eine Instanz zu behandeln, anstatt das Skript pro Scrollrad-Klick auszuführen?

    – einladen

    28. Mai ’14 um 17:15 Uhr

  • Nicht speziell. Nach dem, was ich gesehen habe, werden viele Leute es entweder vermeiden, sich mit Scroll-Tracking zu befassen, oder sie verwenden stattdessen einen Timer (z. B. überprüfen Sie die Position des Benutzers auf der Seite alle x Millisekunden usw.). Wenn es da draußen eine leistungsfähigere Lösung gibt, möchte ich unbedingt davon erfahren!

    – Jesse Dupuy

    7. August 14 um 23:48 Uhr


  • Ich habe einen Weg gefunden, dies zu tun: stackoverflow.com/questions/23919035/…

    – einladen

    7. August 14 um 23:58 Uhr

  • Danke für das Update. Können Sie Ihren Code in Ihre Antwort kopieren? Man weiß nie, ob Codepen eines Tages untergeht. Es ist schon einmal passiert.

    – JDB

    23. April 16 um 15:15 Uhr

  • @JesseDupuy, ich würde diese Antwort positiv bewerten, aber Ihre aktualisierte Version funktioniert nicht, wenn das Dokument in die Ansicht passt (“Breite: 100 vh; Höhe: 100 vh”) oder “Überlauf: versteckt;” hat. “window.addEventListener(‘scroll’, callback)” ist nicht die richtige Antwort auf “window.addEventListener(‘mousewheel’, callback)”.

    – Daniel

    6. Mai 16 um 9:52 Uhr

1644322992 472 Mausrad Ereignisse in jQuery abrufen
Louis Ameline

Ab jetzt im Jahr 2017 können Sie nur noch schreiben

$(window).on('wheel', function(event){

  // deltaY obviously records vertical scroll, deltaX and deltaZ exist too.
  // this condition makes sure it's vertical scrolling that happened
  if(event.originalEvent.deltaY !== 0){

    if(event.originalEvent.deltaY < 0){
      // wheeled up
    }
    else {
      // wheeled down
    }
  }
});

Funktioniert mit aktuellem Firefox 51, Chrome 56, IE9+

  • Diese Antwort funktioniert besser als alle anderen!

    – VDWWD

    15. April 21 um 20:30 Uhr

  • event.originalEvent.deltaY kann beim horizontalen Scrollen 0 sein (gerade in meinem Laptop ausprobiert), also möchten Sie wahrscheinlich if x<0 sonst wenn x>0.

    – ajax333221

    29. Mai 21 um 20:01 Uhr


Mausrad Ereignisse in jQuery abrufen
Darin Dimitrow

Da ist ein Plugin die das Aufwärts-/Abwärts-Mausrad und die Geschwindigkeit über einem Bereich erkennt.

Antworten, die über das Ereignis “Mausrad” sprechen, beziehen sich auf ein veraltetes Ereignis. Das Standardereignis ist einfach “Rad”. Sehen https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel

  • Ich habe diese ausprobiert und festgestellt: “Wheel” funktioniert in Firefox und IE, aber nicht in Chrome. “Mausrad” funktioniert in Chrome und IE, aber nicht in Firefox. “DOMMouseScroll” funktioniert nur in Firefox.

    – Curtis Yallop

    22. August 13 um 20:39 Uhr

  • Wow, das hat mir viel Zeit gespart. Danke!

    – gustavohenke

    20. November 13 um 17:17 Uhr

  • Sieht so aus, als hätte Chrome im August 2013 Unterstützung für „Wheel“ hinzugefügt: code.google.com/p/chromium/issues/detail?id=227454

    – Stapelhaus

    7. Juli 14 um 14:11 Uhr

  • Safari unterstützt das Radereignis immer noch nicht.

    – Thayne

    11. September 14 um 16:11 Uhr

  • Wie Ihre Dokumentation sagt, wheel Ereignis wird unterstützt auf Edge nicht IE was nicht dasselbe ist. Kann ich benutzen

    – Alex

    6. März 18 um 7:16 Uhr

1644322993 274 Mausrad Ereignisse in jQuery abrufen
Gemeinschaft

Das hat bei mir funktioniert 🙂

 //Firefox
 $('#elem').bind('DOMMouseScroll', function(e){
     if(e.originalEvent.detail > 0) {
         //scroll down
         console.log('Down');
     }else {
         //scroll up
         console.log('Up');
     }

     //prevent page fom scrolling
     return false;
 });

 //IE, Opera, Safari
 $('#elem').bind('mousewheel', function(e){
     if(e.originalEvent.wheelDelta < 0) {
         //scroll down
         console.log('Down');
     }else {
         //scroll up
         console.log('Up');
     }

     //prevent page fom scrolling
     return false;
 });

vom Stapelüberlauf

  • Ich habe diese ausprobiert und festgestellt: “Wheel” funktioniert in Firefox und IE, aber nicht in Chrome. “Mausrad” funktioniert in Chrome und IE, aber nicht in Firefox. “DOMMouseScroll” funktioniert nur in Firefox.

    – Curtis Yallop

    22. August 13 um 20:39 Uhr

  • Wow, das hat mir viel Zeit gespart. Danke!

    – gustavohenke

    20. November 13 um 17:17 Uhr

  • Sieht so aus, als hätte Chrome im August 2013 Unterstützung für „Wheel“ hinzugefügt: code.google.com/p/chromium/issues/detail?id=227454

    – Stapelhaus

    7. Juli 14 um 14:11 Uhr

  • Safari unterstützt das Radereignis immer noch nicht.

    – Thayne

    11. September 14 um 16:11 Uhr

  • Wie Ihre Dokumentation sagt, wheel Ereignis wird unterstützt auf Edge nicht IE was nicht dasselbe ist. Kann ich benutzen

    – Alex

    6. März 18 um 7:16 Uhr

1644322993 274 Mausrad Ereignisse in jQuery abrufen
Gemeinschaft

Hier ist eine Vanille-Lösung. Kann in jQuery verwendet werden, wenn das Ereignis an die Funktion übergeben wird event.originalEvent die jQuery als Property des jQuery-Events zur Verfügung stellt. Oder wenn innerhalb der callback Funktion unter fügen wir vor der ersten Zeile hinzu: event = event.originalEvent;.

Dieser Code normalisiert die Radgeschwindigkeit/Menge und ist positiv für das, was bei einer typischen Maus ein Vorwärtsscrollen wäre, und negativ bei einer Rückwärtsbewegung des Mausrads.

Demo: http://jsfiddle.net/BXhzD/

var wheel = document.getElementById('wheel');

function report(ammout) {
    wheel.innerHTML = 'wheel ammout: ' + ammout;
}

function callback(event) {
    var normalized;
    if (event.wheelDelta) {
        normalized = (event.wheelDelta % 120 - 0) == -0 ? event.wheelDelta / 120 : event.wheelDelta / 12;
    } else {
        var rawAmmount = event.deltaY ? event.deltaY : event.detail;
        normalized = -(rawAmmount % 3 ? rawAmmount * 10 : rawAmmount / 3);
    }
    report(normalized);
}

var event="onwheel" in document ? 'wheel' : 'onmousewheel' in document ? 'mousewheel' : 'DOMMouseScroll';
window.addEventListener(event, callback);

Es gibt auch ein Plugin für jQuery, das ausführlicher im Code und etwas mehr Zucker ist: https://github.com/brandonaaron/jquery-mousewheel

.

822600cookie-checkMausrad-Ereignisse in jQuery abrufen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy