Saya memiliki halaman di mana bilah gulir yang berisi baris tabel dengan div di dalamnya dihasilkan secara dinamis dari database. Setiap baris tabel berfungsi seperti link, seperti yang Anda lihat di playlist YouTube di samping pemutar video.
Saat pengguna mengunjungi halaman, opsi tempat mereka berada seharusnya berada di bagian atas div gulir. Fungsionalitas ini berfungsi. Masalahnya adalah itu berjalan terlalu jauh. Seperti opsi yang mereka gunakan sekitar 10px terlalu tinggi. Jadi, halaman tersebut dikunjungi, url digunakan untuk mengidentifikasi opsi mana yang dipilih dan kemudian menggulir opsi itu ke bagian atas div gulir. Catatan: Ini bukan bilah gulir untuk jendela, ini adalah div dengan bilah gulir.
Saya menggunakan kode ini untuk membuatnya memindahkan opsi yang dipilih ke bagian atas div:
var pathArray = window.location.pathname.split( '/' );
var el = document.getElementById(pathArray[5]);
el.scrollIntoView(true);
Ini memindahkannya ke bagian atas div tetapi sekitar 10 piksel terlalu jauh. Ada yang tahu cara memperbaikinya?
sumber
scrollIntoView
mengganggu.Jawaban:
Jika itu sekitar 10px, maka saya kira Anda bisa secara manual menyesuaikan
div
scroll offset yang mengandung seperti itu:sumber
scrollIntoView
?scrollIntoView
fungsi DOM biasa tidak menyebabkan animasi. Apakah Anda berbicara tentang plugin jQuery scrollIntoView?el.scrollIntoView({ behavior: 'smooth' });
. Dukungan tidak bagus!Gulir dengan mulus ke posisi yang benar
Dapatkan benar
y
mengkoordinasikan dan penggunaanwindow.scrollTo({top: y, behavior: 'smooth'})
sumber
jQuery('#el').offset().top
dan kemudian menggunakanwindow.scrollTo
scroll={el => { const yCoordinate = el.getBoundingClientRect().top + window.pageYOffset; const yOffset = -80; window.scrollTo({ top: yCoordinate + yOffset, behavior: 'smooth' }); }}
- di mana offsetnya 10-15 piksel lebih besar dari ukuran header Anda hanya untuk jarak yang lebih baikAnda dapat melakukannya dalam dua langkah:
sumber
scrollIntoView()
pengguliran belum selesai sebelumscrollBy()
dijalankan, pengguliran terakhir akan membatalkan pengguliran sebelumnya . Setidaknya di Chrome 71.scrollIntoView({adjustment:y})
, saya pikir itu harus mungkin dengan kode khusus di akhirPosisi Jangkar Dengan Metode Mutlak
Cara lain untuk melakukan ini adalah dengan memposisikan jangkar tepat di tempat yang Anda inginkan pada halaman daripada mengandalkan pengguliran dengan offset. Saya merasa ini memungkinkan kontrol yang lebih baik untuk setiap elemen (misalnya jika Anda menginginkan offset yang berbeda untuk elemen tertentu), dan mungkin juga lebih tahan terhadap perubahan / perbedaan API browser.
Sekarang offset ditentukan sebagai -100px relatif terhadap elemen. Buat fungsi untuk membuat jangkar ini untuk digunakan kembali kode, atau jika Anda menggunakan kerangka kerja JS modern seperti React lakukan ini dengan membuat komponen yang membuat jangkar Anda, dan berikan nama jangkar dan penyelarasan untuk setiap elemen, yang mungkin atau mungkin tidak sama.
Kemudian gunakan saja:
Untuk pengguliran mulus dengan offset 100px.
sumber
Saya memecahkan masalah ini dengan menggunakan,
Ini membuat elemen muncul
center
setelah scrolling, jadi saya tidak perlu menghitungyOffset
.Semoga membantu ...
sumber
scrollTo
bukan padaelement
tapi padawindow
Ini berfungsi untuk saya di Chrome (Dengan pengguliran halus dan tidak ada peretasan waktu)
Itu hanya memindahkan elemen, memulai gulungan, lalu memindahkannya kembali.
Tidak ada "popping" yang terlihat jika elemen sudah ada di layar.
sumber
Membangun jawaban sebelumnya, saya melakukan ini dalam proyek Angular5.
Dimulai dengan:
Tapi ini memberi beberapa masalah dan perlu setTimeout untuk scrollBy () seperti ini:
Dan bekerja dengan sempurna di MSIE11 dan Chrome 68+. Saya belum menguji di FF. 500ms adalah penundaan terpendek yang saya berani. Turunkan terkadang gagal karena gulungan halus belum selesai. Sesuaikan sesuai kebutuhan untuk proyek Anda sendiri.
1 untuk Fred727 untuk solusi sederhana namun efektif ini.
sumber
Dengan asumsi Anda ingin menggulir ke div yang semuanya berada pada level yang sama di DOM dan memiliki nama kelas "scroll-with-offset", maka CSS ini akan menyelesaikan masalah:
Offset dari bagian atas halaman adalah 100px. Ini hanya akan bekerja sebagaimana dimaksud dengan blok: 'mulai':
Apa yang terjadi adalah bahwa titik teratas div berada di lokasi normal tetapi konten dalamnya mulai 100px di bawah lokasi normal. Itulah gunanya padding-top: 100px. margin-bottom: -100px adalah untuk mengimbangi margin ekstra div di bawah ini. Untuk membuat solusi lengkap juga tambahkan CSS ini untuk mengimbangi margin / paddings untuk div paling atas dan paling bawah:
sumber
Solusi ini milik @ Arseniy-II , saya baru saja menyederhanakannya menjadi sebuah fungsi.
Penggunaan (Anda dapat membuka konsol di sini di StackOverflow dan mengujinya):
sumber
Anda juga dapat menggunakan
element.scrollIntoView()
opsiyang kebanyakan browser dukungan
sumber
Saya mendapatkan ini dan ini bekerja dengan sangat baik untuk saya:
Semoga membantu.
sumber
Solusi lain adalah dengan menggunakan "offsetTop", seperti ini:
sumber
Jadi, mungkin ini agak kikuk tapi sejauh ini bagus. Saya bekerja di sudut 9.
mengajukan
.ts
mengajukan
.html
Saya menyesuaikan offset dengan margin dan padding top.
Saludos!
sumber
Menemukan solusi solusi. Katakanlah Anda ingin menggulir ke div, Elemen di sini misalnya, dan Anda ingin memiliki jarak 20px di atasnya. Setel ref ke div yang dibuat di atasnya:
<div ref={yourRef} style={{position: 'relative', bottom: 20}}/> <Element />
Melakukannya akan membuat jarak yang Anda inginkan.
Jika Anda memiliki header, buat div kosong juga di belakang header dan tetapkan tinggi yang sama dengan tinggi header dan referensikan.
sumber
Ide utama saya adalah membuat tempDiv di atas tampilan yang ingin kita gulir. Ini bekerja dengan baik tanpa ketinggalan dalam proyek saya.
Contoh penggunaan
Semoga membantu
sumber
Berdasarkan jawaban Arseniy-II: Saya memiliki Use-Case di mana entitas scrolling bukan jendela itu sendiri tetapi Template dalam (dalam hal ini div). Dalam skenario ini kita perlu menetapkan ID untuk wadah pengguliran dan mendapatkannya melalui
getElementById
untuk menggunakan fungsi penggulirannya:Meninggalkannya di sini seandainya seseorang menghadapi situasi serupa!
sumber
Ini 2 sen saya.
Saya juga memiliki masalah scrollIntoView yang menggulir sedikit melewati elemen, jadi saya membuat skrip (javascript asli) yang menambahkan elemen ke tujuan, memposisikannya sedikit ke atas dengan css dan menggulir ke yang itu. Setelah menggulir, saya menghapus elemen yang dibuat lagi.
HTML:
File Javascript:
CSS:
Semoga ini bisa membantu siapa pun!
sumber
Saya menambahkan tip css ini untuk mereka yang tidak menyelesaikan masalah ini dengan solusi di atas:
sumber
UPD: Saya telah membuat paket npm yang bekerja lebih baik daripada solusi berikut dan lebih mudah digunakan.
Fungsi smoothScroll saya
Saya telah mengambil solusi luar biasa dari Steve Banton dan menulis fungsi yang membuatnya lebih nyaman digunakan. Akan lebih mudah untuk digunakan
window.scroll()
atau bahkanwindow.scrollBy()
, seperti yang pernah saya coba sebelumnya, tetapi keduanya memiliki beberapa masalah:Ini kodenya
Cukup salin dan ubahlah sesuka Anda.
Untuk membuat elemen link cukup tambahkan atribut data berikut:
Anda juga dapat mengatur atribut lain sebagai tambahan
Ini mewakili
block
opsiscrollIntoView()
fungsi. Secara default, inistart
. Baca lebih lanjut tentang MDN .Akhirnya
Sesuaikan fungsi smoothScroll dengan kebutuhan Anda.
Misalnya, jika Anda memiliki beberapa tajuk tetap (atau saya menyebutnya dengan kata
masthead
), Anda dapat melakukan sesuatu seperti ini:Jika Anda tidak memiliki kasus seperti itu, maka hapus saja, mengapa tidak :-D.
sumber
Solusi sederhana untuk menggulir elemen tertentu ke bawah
sumber
Untuk elemen dalam baris tabel, gunakan JQuery untuk mendapatkan baris di atas yang Anda inginkan , dan cukup gulir ke baris itu sebagai gantinya.
Misalkan saya memiliki beberapa baris dalam sebuah tabel, beberapa di antaranya harus ditinjau oleh dan admin. Setiap baris yang perlu ditinjau memiliki panah atas dan bawah untuk membawa Anda ke item sebelumnya atau berikutnya untuk ditinjau.
Berikut adalah contoh lengkap yang seharusnya dijalankan jika Anda membuat dokumen HTML baru di notepad dan menyimpannya. Ada kode tambahan untuk mendeteksi bagian atas dan bawah item kami untuk ditinjau sehingga kami tidak membuat kesalahan apa pun.
sumber