Ok damit ..
$(window).scroll(function()
{
$('.slides_layover').removeClass('showing_layover');
$('#slides_effect').show();
});
Ich kann anhand meines Verständnisses erkennen, wann jemand einen Bildlauf durchführt. Damit versuche ich herauszufinden, wie man fängt, wenn jemand angehalten hat. Aus dem obigen Beispiel können Sie ersehen, dass ich eine Klasse aus einer Reihe von Elementen entferne, während das Scrollen stattfindet. Ich möchte diese Klasse jedoch wieder aktivieren, wenn der Benutzer aufhört zu scrollen.
Der Grund dafür ist, dass ich beabsichtige, eine Zwischenstopp-Show zu haben, während die Seite gescrollt wird, um der Seite einen besonderen Effekt zu verleihen, an dem ich arbeiten möchte. Aber die eine Klasse, die ich beim Scrollen entfernen möchte, widerspricht diesem Effekt, da er für manche Natur ein Transparenzeffekt ist.
Antworten:
Aktualisieren
Ich habe eine Erweiterung geschrieben , um den Standard-
on
Event-Handler von jQuery zu verbessern . Es fügt den ausgewählten Elementen eine Ereignishandlerfunktion für ein oder mehrere Ereignisse hinzu und ruft die Handlerfunktion auf, wenn das Ereignis für ein bestimmtes Intervall nicht ausgelöst wurde. Dies ist nützlich, wenn Sie einen Rückruf erst nach einer Verzögerung wie dem Größenänderungsereignis oder dergleichen auslösen möchten.Es ist wichtig, das Github-Repo auf Updates zu überprüfen!
https://github.com/yckart/jquery.unevent.js
Verwenden Sie es wie jeden anderen
on
oderbind
-event-Handler, außer dass Sie als letzten einen zusätzlichen Parameter übergeben können:http://yckart.github.com/jquery.unevent.js/
(Diese Demo verwendet
resize
stattdessenscroll
, aber wen interessiert das?!)quelle
Verwenden von jQuery Gas / Entprellen
jQuery Debounce ist eine gute Lösung für solche Probleme. jsFidlle
Der zweite Parameter ist das Flag "at_begin". Hier habe ich gezeigt, wie Code sowohl bei "Bildlaufstart" als auch bei "Bildlaufende" ausgeführt wird.
Verwenden von Lodash
Wie von Barry P vorgeschlagen, haben jsFiddle , Unterstrich oder lodash auch einen Debounce, jeder mit leicht unterschiedlichen Apis.
quelle
leading
und sichtrailing
selbst, dann stellen Sie sicher, dass es keine Verwirrung geben kann.Rob W schlug vor, dass ich mir hier auf dem Stapel einen anderen Beitrag anschaue, der im Wesentlichen meinem ursprünglichen Beitrag ähnlich war. Beim Lesen habe ich einen Link zu einer Seite gefunden:
http://james.padolsey.com/javascript/special-scroll-events-for-jquery/
Dies hat mir letztendlich geholfen, mein Problem sehr gut zu lösen, nachdem ich ein wenig an meine eigenen Bedürfnisse angepasst hatte, aber insgesamt hat es mir geholfen, viel Ärger aus dem Weg zu räumen und mir ungefähr 4 Stunden Zeit zu sparen, es selbst herauszufinden.
Da dieser Beitrag einen gewissen Wert zu haben scheint, dachte ich, ich würde zurückkommen und den Code bereitstellen, der ursprünglich auf dem genannten Link gefunden wurde, für den Fall, dass der Autor jemals beschließt, mit der Site eine andere Richtung einzuschlagen, und den Link schließlich entfernt.
quelle
Ich stimmte einigen der obigen Kommentare zu, dass das Abhören einer Zeitüberschreitung nicht genau genug war, da dies ausgelöst wird, wenn Sie die Bildlaufleiste nicht mehr lange genug bewegen, anstatt wenn Sie aufhören zu scrollen. Ich denke, eine bessere Lösung besteht darin, darauf zu achten, dass der Benutzer die Maus loslässt (mouseup), sobald er mit dem Scrollen beginnt:
Ein Beispiel dafür ist in dieser JSFiddle zu sehen
quelle
Sie können ein Intervall festlegen, das etwa alle 500 ms ausgeführt wird.
Ich habe diesen Code nicht getestet, aber das Prinzip sollte funktionieren.
quelle
sehr kleine Version mit Start- und Endfähigkeit
quelle
Ok, das habe ich schon mal benutzt. Grundsätzlich sehen Sie einen Hold a Ref bis zum letzten
scrollTop()
. Sobald Ihre Zeitüberschreitung verstrichen ist, überprüfen Sie die aktuellescrollTop()
und wenn sie gleich sind, können Sie mit dem Scrollen fertig sein.quelle
ES6-Stil mit Überprüfung des Bildlaufstarts ebenfalls.
Verwendung:
quelle
Bitte überprüfen Sie das jquery mobile Scrollstop-Ereignis
quelle
Für diejenigen, die dies noch brauchen, ist hier die Lösung
quelle
Das sollte funktionieren:
quelle
So können Sie damit umgehen:
quelle
Dies erkennt den Bildlaufstopp nach 1 Millisekunde (oder ändert ihn) mithilfe eines globalen Timers:
quelle