Sepertinya saya tidak bisa menangkap acara gulir di iPad. Tak satu pun dari ini berhasil, apa yang saya lakukan salah?
window.onscroll=myFunction;
document.onscroll=myFunction;
window.attachEvent("scroll",myFunction,false);
document.attachEvent("scroll",myFunction,false);
Semuanya bekerja bahkan di Safari 3 di Windows. Ironisnya, SETIAP browser di PC mendukung window.onload=
jika Anda tidak keberatan mengganggu acara yang ada. Tapi jangan pergi di iPad.
window.pageYOffset
dan tidakdocument.body.scrollTop||document.documentElement.scrollTop
seperti semua browser / perangkat keras lain yang ada.window.pageYOffset
tidak diperbarui dalam fase perlambatan, tetapi hanya ketika gulir selesai.Untuk iOS Anda perlu menggunakan acara touchmove serta acara gulir seperti ini:
sumber
Maaf telah menambahkan jawaban lain ke posting lama tetapi saya biasanya mendapatkan acara gulir dengan sangat baik dengan menggunakan kode ini (berfungsi setidaknya pada 6.1)
Dan itu berhasil untuk saya. Satu-satunya hal yang tidak dilakukannya adalah memberikan acara gulir untuk perlambatan gulir (Setelah perlambatan selesai Anda mendapatkan acara gulir terakhir, lakukan apa yang Anda inginkan.) Tetapi jika Anda menonaktifkan inersia dengan css dengan melakukan ini
Anda tidak mendapatkan inersia pada elemen Anda, untuk tubuh Anda mungkin harus melakukan yang klasik
sumber
gesturechange
acara tidak standar dan hanya didukung oleh Safari: developer.mozilla.org/en-US/docs/Web/Events/gesturechangeSaya bisa mendapatkan solusi hebat untuk masalah ini dengan iScroll, dengan nuansa momentum scrolling dan semuanya https://github.com/cubiq/iscroll Doc github hebat, dan saya kebanyakan mengikutinya. Berikut detail implementasi saya.
HTML: Saya membungkus area konten saya yang dapat digulir dalam beberapa div yang dapat digunakan oleh iScroll:
CSS: Saya menggunakan kelas Modernizr untuk "sentuh" untuk menargetkan perubahan gaya saya hanya untuk perangkat sentuh (karena saya hanya membuat contoh iScroll saat disentuh).
JS: Saya menyertakan iscroll-probe.js dari unduhan iScroll, dan kemudian menginisialisasi scroller seperti di bawah ini, di mana updatePosition adalah fungsi saya yang bereaksi terhadap posisi scroll baru.
Anda harus menggunakan myScroller untuk mendapatkan posisi saat ini, daripada melihat scroll offset. Ini adalah fungsi yang diambil dari http://markdalgleish.com/presentations/embracingtouch/ (artikel yang sangat membantu, tapi agak ketinggalan zaman sekarang)
Satu-satunya gotcha lain adalah kadang-kadang saya akan kehilangan bagian dari halaman saya yang saya coba gulir, dan itu akan menolak untuk menggulir. Saya harus menambahkan beberapa panggilan ke myScroller.refresh () setiap kali saya mengubah konten #wrapper, dan itu menyelesaikan masalah.
EDIT: Gotcha lain adalah bahwa iScroll memakan semua acara "klik". Saya mengaktifkan opsi agar iScroll mengeluarkan acara "ketuk" dan menanganinya alih-alih acara "klik". Untungnya saya tidak perlu banyak mengklik di area gulir, jadi ini bukan masalah besar.
sumber
Sejak iOS 8 keluar, masalah ini tidak ada lagi. Acara gulir sekarang juga dijalankan dengan lancar di Safari iOS.
Jadi, jika Anda mendaftarkan
scroll
event handler dan memeriksawindow.pageYOffset
di dalam event handler itu, semuanya bekerja dengan baik.sumber