Saya memiliki input
elemen ini :
<input type="text" class="textfield" value="" id="subject" name="subject">
Lalu saya punya beberapa elemen lain, seperti input teks lain, textareas, dll.
Ketika pengguna mengklik itu input
dengan #subject
, halaman harus gulir ke elemen halaman terakhir dengan animasi yang bagus. Ini harus berupa gulir ke bawah dan bukan ke atas.
Item terakhir dari halaman adalah submit
tombol dengan #submit
:
<input type="submit" class="submit" id="submit" name="submit" value="Ok, Done.">
Animasi tidak boleh terlalu cepat dan harus lancar.
Saya menjalankan versi jQuery terbaru. Saya lebih suka tidak menginstal plugin apa pun selain menggunakan fitur jQuery default untuk mencapai ini.
javascript
jquery
scroll
DiegoP.
sumber
sumber
scrollTo
dinonaktifkan untuk saya karena plugin chrome, tidak yakin yang mana.Jawaban:
Dengan asumsi Anda memiliki tombol dengan id
button
, coba contoh ini:Saya mendapat kode dari artikel Gulir dengan lancar ke suatu elemen tanpa plugin jQuery . Dan saya sudah mengujinya pada contoh di bawah ini.
sumber
.scrollTop(…)
alih-alih.animate({scrollTop: …}, …)
.jQuery .scrollTo (): Lihat - Demo, API, Sumber
Saya menulis plugin yang ringan ini untuk membuat pengguliran halaman / elemen lebih mudah. Ini fleksibel di mana Anda bisa meneruskan elemen target atau nilai yang ditentukan. Mungkin ini bisa menjadi bagian dari rilis resmi jQuery berikutnya, bagaimana menurut Anda?
Contoh Penggunaan:
Pilihan:
scrollTarget : Elemen, string, atau angka yang menunjukkan posisi gulir yang diinginkan.
offsetTop : Angka yang menentukan jarak tambahan di atas target gulir.
Durasi : String atau angka yang menentukan berapa lama animasi akan berjalan.
pelonggaran : Sebuah string yang menunjukkan fungsi pelonggaran mana yang akan digunakan untuk transisi.
selesai : Suatu fungsi untuk memanggil setelah animasi selesai.
sumber
Jika Anda tidak terlalu tertarik dengan efek gulir halus dan hanya tertarik untuk menggulir ke elemen tertentu, Anda tidak memerlukan beberapa fungsi jQuery untuk ini. Javascript telah mencakup kasus Anda:
https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView
Jadi yang perlu Anda lakukan adalah:
$("selector").get(0).scrollIntoView();
.get(0)
digunakan karena kami ingin mengambil elemen DOM JavaScript dan bukan elemen DOM JQuery.sumber
$(selector)[0]
?document.getElementById('#elementID').scrollIntoView()
. Tidak ada gunanya memuat perpustakaan ~ 100k hanya untuk memilih elemen dan kemudian mengubahnya menjadi JavaScript biasa.document.getElementById('elementID').scrollIntoView()
Menggunakan skrip sederhana ini
Akan membuat semacam itu jika tag hash ditemukan di url, scrollTo menghidupkan dengan ID. Jika tag hash tidak ditemukan, abaikan script.
sumber
$(window.location.hash)
tidak akan bekerja untuk hash yang gagal memenuhi deteksi regex id jQuery. Misalnya, hash yang berisi angka. Ini juga agak berbahaya; format input harus divalidasi sehingga Anda tidak memilih elemen yang berbeda.sumber
jQuery(document).ready(function($) { $(document).on( "click", 'a[href^="#"]', function( e ) { e.preventDefault(); var target = this.hash, $target = $(target); $('html, body').stop().animate({ scrollTop: $target.offset().top - 100}, 1000); }); });
Solusi oleh Steve dan Peter bekerja sangat baik.
Tetapi dalam beberapa kasus, Anda mungkin harus mengubah nilai menjadi bilangan bulat. Anehnya, nilai yang dikembalikan dari
$("...").offset().top
kadang-kadang dalamfloat
.Menggunakan:
parseInt($("....").offset().top)
Sebagai contoh:
sumber
Versi ringkas dari solusi "animate".
Penggunaan dasar:
$('#your_element').scrollTo();
sumber
Inilah cara saya melakukannya.
Bekerja di browser apa saja.
Dapat dengan mudah dibungkus menjadi suatu fungsi
Berikut ini contoh kerjanya
Documents
sumber
Saya tahu cara tanpa jQuery:
Sunting: Sudah dua tahun dan saya masih mendapatkan reputasi secara acak dari postingan ini lmao
sumber
Jika Anda hanya menangani pengguliran ke elemen input, Anda dapat menggunakannya
focus()
. Misalnya, jika Anda ingin menggulir ke input yang terlihat pertama:Atau input yang terlihat pertama dalam wadah dengan kelas
.error
:Terima kasih kepada Tricia Ball karena menunjukkan ini!
sumber
Dengan solusi ini Anda tidak memerlukan plugin apa pun dan tidak diperlukan pengaturan selain menempatkan script sebelum
</body>
tag penutup Anda .Saat dimuat, jika ada hash di alamat, kami gulir ke sana.
Dan - setiap kali Anda mengklik
a
tautan denganhref
hash misalnya#top
, kami gulir ke sana.sumber
> 1
bukan0
, hanya karena/#
menyebabkan skrip ini rusakreturn false;
di akhir acara klik untuk mencegah tindakan default - segera menggulir ke jangkar - agar tidak terjadi.e.preventDefault();
e.preventDefault()
namun tidak memperbarui hash di url saat mengklik, selalu url tanpa hashDalam kebanyakan kasus, akan lebih baik menggunakan plugin. Serius. Aku akan menggembar - gemborkan milikku di sini . Tentu saja ada yang lain juga. Tapi tolong periksa apakah mereka benar-benar menghindari jebakan yang Anda ingin plugin di tempat pertama - tidak semuanya melakukannya.
Saya telah menulis tentang alasan menggunakan plugin di tempat lain . Singkatnya, liner yang menopang sebagian besar jawaban di sini
adalah UX yang buruk.
Animasi tidak menanggapi tindakan pengguna. Itu berjalan bahkan jika pengguna mengklik, mengetuk, atau mencoba untuk menggulir.
Jika titik awal animasi dekat dengan elemen target, animasi itu lambat sekali.
Jika elemen target ditempatkan di dekat bagian bawah halaman, itu tidak dapat digulir ke bagian atas jendela. Animasi gulir berhenti tiba-tiba kemudian, di tengah gerakan.
Untuk menangani masalah ini (dan banyak lainnya ), Anda dapat menggunakan plugin milik saya, jQuery.scrollable . Panggilan itu kemudian menjadi
dan hanya itu. Tentu saja, ada lebih banyak opsi .
Berkenaan dengan posisi target,
$target.offset().top
melakukan pekerjaan dalam banyak kasus. Namun perlu diketahui bahwa nilai yang dikembalikan tidak membatasihtml
elemen pada akun ( lihat demo ini ). Jika Anda ingin posisi target akurat dalam situasi apa pun, lebih baik digunakanItu bekerja bahkan jika perbatasan pada
html
elemen diatur.sumber
Animasi:
sumber
Jika Anda ingin menggulir di dalam wadah melimpah (alih-alih
$('html, body')
menjawab di atas), bekerja juga dengan penentuan posisi absolut, ini adalah cara yang harus dilakukan:sumber
Cara mudah untuk mencapai gulir halaman untuk menargetkan id id
sumber
Ini adalah pendekatan saya yang mengabstraksi ID dan href, menggunakan pemilih kelas generik
sumber
Sangat sederhana dan mudah digunakan plugin jQuery khusus. Cukup tambahkan atribut
scroll=
ke elemen yang dapat diklik dan tetapkan nilainya ke pemilih yang ingin Anda gulir.Seperti:
<a scroll="#product">Click me</a>
. Dapat digunakan pada elemen apa saja.sumber
sumber
$('html, body').animate(...)
tidak untuk saya di iphone, browser safari chrome android.Saya harus menargetkan elemen konten root halaman.
Inilah yang akhirnya saya dapatkan
Semua konten tubuh terhubung dengan div #content
sumber
Ini adalah jawaban Atharva dari: https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView . Hanya ingin menambahkan jika dokumen Anda ada dalam iframe, Anda dapat memilih elemen di bingkai induk untuk menggulir ke tampilan:
sumber
sumber
Ini pertama akan gulir ke bawah ke
#submit
kemudian mengembalikan kursor kembali ke input yang diklik, yang meniru gulir ke bawah, dan bekerja pada sebagian besar browser. Ini juga tidak memerlukan jQuery karena dapat ditulis dalam JavaScript murni.Bisakah mode ini menggunakan
focus
fungsi meniru animasi dengan cara yang lebih baik, melalui chainingfocus
calls. Saya belum menguji teori ini, tetapi akan terlihat seperti ini:sumber
Saya mengatur elemen gulir modul
npm install scroll-element
. Ini berfungsi seperti ini:Ditulis dengan bantuan dari posting SO berikut:
mengimbangi-top-of-an-elemen-tanpa-jquery
scrolltop-animation-without-jquery
Ini kodenya:
sumber
Untuk menampilkan elemen lengkap (jika memungkinkan dengan ukuran jendela saat ini):
sumber
Saya menulis fungsi tujuan umum yang bergulir ke objek jQuery, pemilih CSS, atau nilai numerik.
Contoh penggunaan:
Kode fungsi:
sumber
Untuk apa nilainya, ini adalah bagaimana saya berhasil mencapai perilaku seperti itu untuk elemen umum yang dapat berada di dalam DIV dengan menggulir. Dalam kasus kami, kami tidak menggulir seluruh tubuh, tetapi hanya elemen tertentu dengan overflow: otomatis; dalam tata letak yang lebih besar.
Ini menciptakan input palsu dari ketinggian elemen target, dan kemudian menempatkan fokus padanya, dan browser akan mengurus sisanya tidak peduli seberapa dalam dalam hierarki yang dapat digulir Anda. Bekerja seperti pesona.
sumber
Ini bekerja untuk saya:
sumber
sumber
ONELINER
Tampilkan cuplikan kode
sumber
Jawaban yang diperbarui pada 2019:
sumber