Ich suche etwas in diesem Sinne:
$(window).scroll(function(event){
if (/* magic code*/ ){
// upscroll code
} else {
// downscroll code
}
});
Irgendwelche Ideen?
javascript
jquery
Zach
quelle
quelle
wheel
Ereignis ist heutzutage am einfachsten zu nutzen : stackoverflow.com/a/33334461/3168107 .Antworten:
Überprüfen Sie den aktuellen
scrollTop
und den vorherigen WertscrollTop
quelle
lastScrollTop
bei 0 haben oder wird er richtig initialisiert?var lastScrollTop = $(window).scrollTop()
nachdem der Browser die Bildlaufposition beim Laden der Seite aktualisiert hat.Sie können dies tun, ohne den vorherigen Bildlauf nach oben verfolgen zu müssen, da alle anderen Beispiele Folgendes erfordern:
Ich bin kein Experte auf diesem Gebiet, also zögern Sie nicht, es weiter zu erforschen, aber es scheint, dass, wenn Sie verwenden
$(element).scroll
das Ereignis, auf das Sie hören, ein "Scroll" -Ereignis ist .Wenn Sie jedoch
mousewheel
mithilfe von bind gezielt auf ein Ereignis warten, enthält dasoriginalEvent
Attribut des Ereignisparameters für Ihren Rückruf unterschiedliche Informationen. Ein Teil dieser Informationen istwheelDelta
. Wenn es positiv ist, haben Sie das Mausrad nach oben bewegt. Wenn es negativ ist, haben Sie das Mausrad nach unten bewegt.Ich vermute, dass
mousewheel
Ereignisse ausgelöst werden, wenn sich das Mausrad dreht, auch wenn die Seite nicht scrollt. Ein Fall, in dem 'Scroll'-Ereignisse wahrscheinlich nicht ausgelöst werden. Wenn Sie möchten, können Sieevent.preventDefault()
am Ende Ihres Rückrufs aufrufen , um zu verhindern, dass die Seite gescrollt wird, und das Mausrad-Ereignis für etwas anderes als einen Bildlauf verwenden, z. B. für eine Art Zoomfunktion.quelle
scrollTop
nicht aktualisiert wurde. In der Tat$(window).scroll()
überhaupt nicht geschossen.Speichern Sie die vorherige Bildlaufposition und prüfen Sie, ob die neue größer oder kleiner ist.
Hier ist eine Möglichkeit, globale Variablen zu vermeiden ( Geige hier verfügbar ):
quelle
Bestehende Lösung
Es könnte 3 Lösungen aus diesem Beitrag und anderen Antworten geben .
Lösung 1
Lösung 2
Lösung 3
Multi Browser Test
Ich konnte es nicht auf Safari testen
Chrom 42 (Win 7)
Firefox 37 (Win 7)
IE 11 (Win 8)
IE 10 (Win 7)
IE 9 (Win 7)
IE 8 (Win 7)
Kombinierte Lösung
Aus dem Multi-Browser-Test habe ich beschlossen, Lösung 3 für gängige Browser und Lösung 1 für Firefox und IE 11 zu verwenden.
Ich habe diese Antwort weitergeleitet , um IE 11 zu erkennen.
quelle
Safari browser
, wäre es hilfreich, die Lösung zu ergänzen.Ich verstehe, dass es bereits eine akzeptierte Antwort gegeben hat, wollte aber posten, was ich verwende, falls es jemandem helfen kann. Ich verstehe die Richtung wie
cliphex
beim Mausrad-Event, aber mit Unterstützung für Firefox. Es ist nützlich, dies auf diese Weise zu tun, wenn Sie so etwas wie das Sperren des Bildlaufs ausführen und den aktuellen Bildlauf oben nicht erhalten können.Hier finden Sie eine Live - Version hier .
quelle
Bildlaufereignis
Die Scroll - Ereignis verhält sich seltsam in FF (es wird gebrannt , um eine Menge Zeit wegen der Glätte Scrollen) , aber es funktioniert.
Hinweis: Das Scroll - Ereignis tatsächlich gebrannt wird, wenn die Bildlaufleiste ziehen, die Cursortasten oder Mausrad verwenden.
Rad Ereignis
Sie können sich auch MDN ansehen, es enthält großartige Informationen zum Wheel Event .
Hinweis: Das Radereignis wird nur bei Verwendung des Mausrads ausgelöst . Cursortasten und Ziehen der Bildlaufleiste lösen das Ereignis nicht aus.
Ich habe das Dokument und das Beispiel gelesen: Als ich dieses Ereignis über den Browser hinweg abhörte
und nach einigen Tests mit FF, IE, Chrome, Safari, kam ich zu diesem Ausschnitt:
quelle
Wenn Sie nur wissen möchten, ob Sie mit einem Zeigergerät (Maus oder Trackpad ) nach oben oder unten scrollen, können Sie die Eigenschaft deltaY des
wheel
Ereignisses verwenden.quelle
oder verwenden Sie die Mausradverlängerung , siehe hier .
quelle
Ich habe hier viele Versionen guter Antworten gesehen, aber es scheint, dass einige Leute browserübergreifende Probleme haben, also ist dies meine Lösung.
Ich habe dies erfolgreich verwendet, um die Richtung in FF, IE und Chrome zu erkennen. Ich habe es nicht in Safari getestet, da ich normalerweise Windows verwende.
Denken Sie daran, dass ich dies auch verwende, um das Scrollen zu stoppen. Wenn Sie also weiterhin scrollen möchten, müssen Sie das entfernen
e.preventDefault(); e.stopPropagation();
quelle
Hier ist eine modifizierte Version von Josiahs akzeptierter Antwort :
quelle
Sie können die Mausrichtung bestimmen.
quelle
Verwenden Sie diese Option, um die Bildlaufrichtung zu ermitteln. Dies dient nur zum Ermitteln der Richtung der vertikalen Schriftrolle. Unterstützt alle Cross-Browser.
Beispiel
quelle
Dieser Code funktioniert gut mit IE, Firefox, Opera und Chrome:
'Radmausrad' und die Eigenschaft deltaY müssen in der Funktion bind () verwendet werden.
Denken Sie daran: Ihr Benutzer muss aus Sicherheitsgründen sein System und seine Browser aktualisieren. Im Jahr 2018 sind die Ausreden von "Ich habe IE 7" ein Unsinn. Wir müssen die Benutzer aufklären.
Haben Sie einen guten Tag :)
quelle
Halte es super einfach:
jQuery Event Listener Way:
Vanilla JavaScript Event Listener Way:
Funktion bleibt gleich:
Ich schrieb eine vertiefende Post auf sie hier
quelle
Sie können sowohl die Scroll- als auch die Mausradoption verwenden, um die Auf- und Abbewegung gleichzeitig zu verfolgen.
Sie können 'body' auch durch (window) ersetzen.
quelle
Wenn Sie ein Inkrement
.data ()
des gescrollten Elements auf Lager haben, können Sie testen, wie oft der Bildlauf oben angekommen ist.quelle
Warum benutzt niemand das
event
Objekt, dasjQuery
beim Scrollen zurückgegeben wurde?Ich verwende
chromium
und habe in anderen Browsern nicht überprüft, ob sie diedir
Eigenschaft haben.quelle
Da
bind
in Version 3 veraltet ist ("ersetzt durchon
") undwheel
jetzt unterstützt wird , vergessen SiewheelDelta
:wheel
Browserkompatibilität des Ereignisses auf MDNs (18.03.2019) :quelle
if(e.originalEvent.deltaY > 0) { console.log('down'); } else if(e.originalEvent.deltaY < 0) { console.log('up'); } else if(e.originalEvent.deltaX > 0) { console.log('right'); } else if(e.originalEvent.deltaX < 0) { console.log('left'); }
touchmove
Stattdessen für den mobilen Einsatz .Sie können dies auch verwenden
quelle
Im
.data()
Element können Sie einen JSON speichern und Werte testen, um Ereignisse zu startenquelle
Dies ist eine einfache und einfache Erkennung, wenn der Benutzer vom oberen Rand der Seite wegblättert und wenn er zum oberen Rand zurückkehrt.
quelle
Dies ist eine optimale Lösung, um die Richtung zu erkennen, wenn der Benutzer das Scrollen beendet.
quelle
Sie sollten dies versuchen
quelle
Ich hatte Probleme mit elastischem Scrollen (Scroll Bouncing, Gummiband). Das Ignorieren des Down-Scroll-Ereignisses in der Nähe des oberen Seitenbereichs hat bei mir funktioniert.
quelle
Dies funktioniert in allen PC- oder Telefonbrowsern und erweitert die Top-Antworten. Man kann ein komplexeres Ereignisobjektfenster ["scroll_evt"] erstellen und es dann in der Funktion handleScroll () aufrufen. Dieser wird für 2 gleichzeitige Bedingungen ausgelöst, wenn eine bestimmte Verzögerung verstrichen ist oder ein bestimmtes Delta überschritten wird, um einige unerwünschte Auslöser zu beseitigen.
quelle