Ich kann das Scroll-Ereignis scheinbar nicht auf einem iPad erfassen. Keine dieser Arbeiten, was mache ich falsch?
window.onscroll=myFunction;
document.onscroll=myFunction;
window.attachEvent("scroll",myFunction,false);
document.attachEvent("scroll",myFunction,false);
Sie alle funktionieren sogar unter Safari 3 unter Windows. Ironischerweise unterstützt JEDER Browser auf dem PC, window.onload=
wenn es Ihnen nichts ausmacht, vorhandene Ereignisse zu überfrachten. Aber nicht auf das iPad gehen.
window.pageYOffset
und nichtdocument.body.scrollTop||document.documentElement.scrollTop
wie dieser funktioniert .window.pageYOffset
in der Verzögerungsphase nicht aktualisiert, sondern nur, wenn der Bildlauf abgeschlossen ist.Für iOS müssen Sie das Touchmove- Ereignis sowie das Scroll- Ereignis wie folgt verwenden :
quelle
Es tut mir leid, dass ich einem alten Beitrag eine weitere Antwort hinzugefügt habe, aber normalerweise erhalte ich mit diesem Code sehr gut ein Bildlaufereignis (es funktioniert mindestens unter 6.1).
Und das funktioniert bei mir. Das einzige, was es nicht tut, ist ein Bildlaufereignis für die Verzögerung des Bildlaufs anzugeben (Sobald die Verzögerung abgeschlossen ist, erhalten Sie ein endgültiges Bildlaufereignis, machen Sie es wie Sie wollen.), Aber wenn Sie die Trägheit mit CSS auf diese Weise deaktivieren
Sie bekommen keine Trägheit auf Ihre Elemente, für den Körper, obwohl Sie möglicherweise den Klassiker machen müssen
quelle
gesturechange
Ereignisse sind nicht Standard und werden nur von Safari unterstützt: developer.mozilla.org/en-US/docs/Web/Events/gesturechangeIch konnte mit iScroll eine großartige Lösung für dieses Problem finden, mit dem Gefühl des Momentum-Scrollings und allem https://github.com/cubiq/iscroll Das Github-Dokument ist großartig und ich habe es größtenteils befolgt. Hier sind die Details meiner Implementierung.
HTML: Ich habe den scrollbaren Bereich meines Inhalts in einige Divs eingeschlossen, die iScroll verwenden kann:
CSS: Ich habe die Modernizr-Klasse für "touch" verwendet, um meine Stiländerungen nur auf Touch-Geräte auszurichten (da ich iScroll nur bei Berührung instanziiert habe).
JS: Ich habe iscroll-probe.js aus dem iScroll-Download aufgenommen und dann den Scroller wie folgt initialisiert, wobei updatePosition meine Funktion ist, die auf die neue Scrollposition reagiert.
Sie müssen myScroller verwenden, um die aktuelle Position zu ermitteln, anstatt den Bildlaufversatz zu betrachten. Hier ist eine Funktion von http://markdalgleish.com/presentations/embracingtouch/ (ein super hilfreicher Artikel, aber jetzt etwas veraltet).
Das einzige andere Problem war, dass ich gelegentlich einen Teil meiner Seite verlor, zu der ich scrollen wollte, und sich weigerte, zu scrollen. Ich musste myScroller.refresh () immer dann aufrufen, wenn ich den Inhalt des #wrapper änderte, und das löste das Problem.
EDIT: Ein weiteres Problem war, dass iScroll alle "Klick" -Ereignisse isst. Ich habe die Option aktiviert, dass iScroll ein "Tap" -Ereignis ausgibt, und diese anstelle von "Click" -Ereignissen behandelt. Zum Glück musste ich nicht viel in den Bildlaufbereich klicken, also war das keine große Sache.
quelle
Seit dem Erscheinen von iOS 8 besteht dieses Problem nicht mehr. Das Scroll-Ereignis wird jetzt auch in iOS Safari reibungslos ausgelöst.
Wenn Sie also den
scroll
Ereignishandler registrieren undwindow.pageYOffset
in diesen Ereignishandler einchecken , funktioniert alles einwandfrei.quelle