So prüfen Sie jedes neue Scroll und vermeiden Apple-Mäuse Problem (Multiple-Scroll-Effekt)

9

Ich versuche, ein Mausrad-Ereignisskript zu erstellen, bekomme aber einige Probleme, da ich eine Apple Magic Mouse und die Scroll-Funktion für den Fortfahren benutze.

Ich möchte dies Ссылка (von jQuery Extras Scrollbar mit Mausrad - Scrollen Sie eine Position und stoppen Sie , mit Ссылка ), aber ich möchte eine kurze Animation (wie 250ms) beim Scrollen zu Boxen, UND Fähigkeit, durch mehrere Boxen gehen, wenn mehrere Male während einer Animation scrollen. (Wenn ich scrolle, beginnt die Animation mit dem Scrollen zur zweiten Box, aber wenn ich noch einmal scrolle, möchte ich zur dritten gehen, und wenn ich zwei Mal scrolle, zur vierten usw.)

Ich dachte zuerst stopPropagation / preventDefault / return false; könnte die Mausradgeschwindigkeit (und das var delta) "stoppen" - so kann ich die Anzahl der neuen Scroll-Ereignisse zählen (vielleicht mit einem Timer) -, aber keiner von ihnen tut das.

Ideen?

BEARBEITEN: Wenn Sie versuchen, mit diesen Mäusen in Google Calendars zu blättern, werden mehrere Kalender geschaltet, nicht nur einer. Es scheint, dass sie das auch nicht beheben können.

EDIT 2: Ich dachte, das Mausrad zu lösen und es erneut zu binden, nachdem ich den Mausrad-Listener stoppen konnte (und nicht auf das Ende der Trägheit hören). Hat es nicht.

EDIT 3: habe versucht, mit den Daten zu arbeiten (danke an diesen Beitrag ), nicht optimal, aber besser als nichts < a href="http://jsfiddle.net/eZ6KE/"> Ссылка

    
Joan 04.10.2012, 12:23
quelle

3 Antworten

1

Am besten ist es, ein Timeout zu verwenden und innerhalb des Listeners zu prüfen, ob das Timeout noch aktiv ist:

%Vor%

Sie können dies auf jedes scrollbare Element anwenden und in meinem Fall habe ich die scrollbare jQuery-Tool-Bibliothek verwendet, aber es wurde stark angepasst, um die Browser-Unterstützung zu verbessern und benutzerdefinierte Funktionen für meinen Anwendungsfall hinzuzufügen.

Eine Sache, die Sie beachten sollten, ist sicherzustellen, dass das Zeitlimit ausreichend lang ist, um zu verhindern, dass mehrere Ereignisse nahtlos ausgelöst werden. Meine Lösung ist nur wirksam, wenn Sie die Scrollgeschwindigkeit von Elementen steuern möchten und wie viele gleichzeitig gescrollt werden sollen. Wenn Sie console.log(event) am Anfang der Listener-Funktion hinzufügen und mit einem kontinuierlichen Scroll-Peripheriegerät scrollen, werden viele Mausrad-Ereignisse ausgelöst.

Nervig ist der Firefox-Scroll DOMMouseScroll nicht auf magischen Maus- oder Continuous-Scroll-Geräten , sondern bei normalen Scroll-Geräten, die einen Bildlauf haben und durch den Klick-Zyklus des Mausrad.

    
Justin Mitchell 28.10.2015 00:30
quelle
0

Ich hatte ein ähnliches Problem auf meiner Website und nach vielen gescheiterten Versuchen habe ich eine Funktion geschrieben, die den Gesamtversatz der ausgewählten Box berechnet und die Animation gestartet hat. Es sah so aus:

%Vor%

Ich hoffe, es gibt Ihnen eine Vorstellung davon, wie Sie erreichen können, was Sie wollen.

    
Dygestor 19.11.2012 17:17
quelle
0

Sie können versuchen, zu erkennen, wenn sich das Rad nicht mehr bewegt, aber es würde Ihre Reaktionszeit verzögern

%Vor%

Quelle: jquery mousewheel: Erkennen, wenn das Rad stoppt?

oder implementieren Sie Flags, die den Start einer neuen Animation vermeiden

%Vor%     
rodrigot 11.03.2014 18:29
quelle