Saya telah menggulir div
dan saya ingin memiliki tautan ketika saya mengkliknya, ini akan memaksa ini div
untuk menggulir untuk melihat elemen di dalamnya. Saya menulis JavasSript-nya seperti ini:
document.getElementById(chr).scrollIntoView(true);
tapi ini menggulung semua halaman sambil menggulirnya div
sendiri. Bagaimana cara memperbaikinya?
Saya ingin mengatakannya seperti itu
MyContainerDiv.getElementById(chr).scrollIntoView(true);
javascript
html
scroll
Amr Elgarhy
sumber
sumber
SetTimeout
dalam$(document).ready({})
fungsi dan setfocus()
ke elemen Anda ingin untuk menggulir ke. Bekerja untuk sayaJawaban:
Anda perlu mendapatkan offset atas elemen yang ingin Anda gulir ke tampilan, relatif terhadap induknya (wadah div gulir):
Variabel topPos sekarang diatur ke jarak antara bagian atas div pengguliran dan elemen yang ingin Anda lihat (dalam piksel).
Sekarang kami memberitahu div untuk menggulir ke posisi itu menggunakan
scrollTop
:Jika Anda menggunakan kerangka JS prototipe, Anda akan melakukan hal yang sama seperti ini:
Sekali lagi, ini akan menggulir div sehingga elemen yang ingin Anda lihat persis di atas (atau jika itu tidak mungkin, gulir sejauh mungkin sehingga dapat terlihat).
sumber
myElement.offsetTop
akan memicu reflow (tata letak meronta-ronta) yang bisa menjadi hambatan kinerjaposition: relative
jika tidak, Anda akan menghabiskan banyak waktu debugging seperti yang baru saja saya lakukan.overflow-y
properti kescroll
untuk elemen induk (scrolling_div
), kalau tidak itu tidak berfungsi. Nilai css default untukoverflow
properti adalahauto
dan meskipun itu juga memungkinkan pengguliran manual, kode js tidak akan berfungsi (bahkan dengan{psition: relative}
..)h4
makadiv
kemudianarticle
tag dan hanyaarticle
bekerja untuk saya.Anda harus menemukan posisi elemen dalam DIV yang ingin Anda gulir, dan mengatur properti scrollTop.
Perbarui :
Kode sampel untuk bergerak ke atas atau ke bawah
sumber
Metode 1 - Menggulir halus ke elemen di dalam elemen
Metode 2 - Menggunakan Element.scrollIntoView :
Metode 3 - Menggunakan perilaku gulir CSS :
sumber
Untuk menggulir elemen ke tampilan div, hanya jika diperlukan, Anda dapat menggunakan
scrollIfNeeded
fungsi ini :sumber
Kode harus:
Anda ingin menggulir perbedaan antara posisi teratas anak dan posisi teratas div.
Dapatkan akses ke elemen anak menggunakan:
dan seterusnya....
sumber
var chElem = document.getElementById('element_within_div');
dan baris ketiga membacavar topPos = divElem.offsetTop;
?Jika Anda menggunakan jQuery, Anda dapat menggulir dengan animasi menggunakan yang berikut ini:
Animasi ini opsional: Anda juga bisa mengambil nilai scrollTop yang dihitung di atas dan meletakkannya langsung di properti scrollTop wadah .
sumber
Native JS, Cross Browser, Smooth Scroll (Pembaruan 2020)
Pengaturan
ScrollTop
memang memberikan hasil yang diinginkan tetapi gulir sangat tiba-tiba. Menggunakanjquery
untuk memiliki scroll yang lancar bukanlah suatu pilihan. Jadi, inilah cara asli untuk menyelesaikan pekerjaan yang mendukung semua browser utama. Referensi - caniuseItu dia!
Dan inilah cuplikan kerja untuk yang ragu -
Pembaruan: Seperti yang dapat Anda rasakan di komentar, tampaknya itu
Element.scrollTo()
tidak didukung di IE11. Jadi jika Anda tidak peduli tentang IE11 (Anda benar-benar tidak boleh), jangan ragu untuk menggunakan ini di semua proyek Anda. Perhatikan bahwa ada dukungan untuk Edge! Jadi Anda tidak benar-benar meninggalkan pengguna Edge / Windows Anda;)Referensi
sumber
scrollTo()
mungkin didukung di semua browser utama untukWindow
objek tetapi tidak didukung di IE atau Edge untuk elemen.window.scrollTo
, tidakElement.scrollTo
. Coba ini di Edge, misalnya, dan periksa konsol: codepen.io/timdown/pen/abzVEMBAda dua fakta:
1) Komponen scrollIntoView tidak didukung oleh safari.
2) JS framework jQuery dapat melakukan pekerjaan seperti ini:
sumber
Berikut ini adalah solusi JavaScript murni sederhana yang berfungsi untuk Nomor target (nilai untuk
scrollTop
), elemen DOM target, atau beberapa kasus String khusus:Dan berikut ini beberapa contoh penggunaannya:
atau
atau
sumber
Contoh lain menggunakan jQuery dan menghidupkan.
sumber
Pengguliran Animasi Pengguna
Berikut ini adalah contoh cara menggulir secara pemrograman secara
<div>
horizontal, tanpa JQuery . Untuk menggulir secara vertikal, Anda akan mengganti menulisscrollLeft
dengan JavaScript denganscrollTop
.JSFiddle
https://jsfiddle.net/fNPvf/38536/
HTML
JavaScript
Kredit untuk Dux .
Pengguliran Animasi Otomatis
Selain itu, berikut adalah fungsi untuk menggulir
<div>
sepenuhnya ke kiri dan kanan. Satu-satunya hal yang kami ubah di sini adalah kami melakukan pemeriksaan untuk melihat apakah ekstensi penuh dari gulir telah digunakan sebelum melakukan panggilan rekursif untuk menggulir lagi.JSFiddle
https://jsfiddle.net/0nLc2fhh/1/
HTML
JavaScript
sumber
Inilah yang akhirnya membantu saya
sumber
Browser tidak menggulir secara otomatis ke elemen yang mendapat fokus, jadi apa yang Anda juga dapat melakukannya untuk membungkus elemen yang Anda perlu digulir ke dalam
<a>...</a>
dan kemudian ketika Anda perlu gulir hanya mengatur fokus pada itua
sumber
Setelah memilih elemen, cukup gunakan
scrollIntoView
fungsi dengan opsi di bawah ini:Jadi jawaban untuk posting ini adalah:
sumber
mengingat Anda memiliki elemen div yang perlu Anda gulir ke dalam, coba bagian kode ini
document.querySelector('div').scroll(x,y)
ini bekerja dengan saya di dalam div dengan sebuah gulir, ini akan bekerja dengan Anda jika Anda mengarahkan mouse ke elemen ini dan kemudian mencoba untuk menggulir ke bawah atau ke atas. Jika itu bekerja secara manual, itu harus bekerja juga
sumber