Saya memiliki dokumen HTML dengan gambar dalam format grid menggunakan <ul><li><img...
. Jendela browser memiliki pengguliran vertikal & horizontal.
Pertanyaan:
Ketika saya mengklik suatu gambar<img>
, bagaimana cara mendapatkan seluruh dokumen untuk menggulir ke posisi di mana gambar yang baru saja saya klik top:20px; left:20px
?
Saya sudah menelusuri di sini untuk posting serupa ... meskipun saya cukup baru untuk JavaScript, dan ingin memahami bagaimana ini dicapai untuk diri saya sendiri.
javascript
jquery
Nasir
sumber
sumber
Jawaban:
Karena Anda ingin tahu cara kerjanya, saya akan menjelaskannya selangkah demi selangkah.
Pertama Anda ingin mengikat fungsi sebagai pengendali klik gambar:
Itu akan menerapkan penangan klik ke gambar dengan
id="someImage"
. Jika Anda ingin melakukan ini untuk semua gambar, ganti'#someImage'
dengan'img'
.Sekarang untuk kode gulir yang sebenarnya:
Dapatkan offset gambar (relatif terhadap dokumen):
Kurangi 20 dari
top
danleft
:Sekarang hidupkan properti CSS scroll-top dan scroll-left dari
<body>
dan<html>
:sumber
.scrollIntoView
metode W3C lakukan ketika elemen bersarang dalam beberapa wadah yang meluap.Element.scrollIntoView()
: developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoViewscrollIntoView
Ada metode DOM yang disebut
scrollIntoView
, yang didukung oleh semua browser utama, yang akan menyelaraskan elemen dengan bagian atas / kiri viewport (atau sedekat mungkin).Pada browser yang didukung, Anda dapat memberikan opsi:
Atau, jika semua elemen memiliki ID unik, Anda bisa mengubah
hash
propertilocation
objek untuk dukungan tombol maju / mundur:Setelah itu, cukup sesuaikan
scrollTop
/scrollLeft
properties dengan -20:sumber
$("#myImage")[0].scrollIntoView(false);
akan menyelaraskan elemen di bagian bawah jendela.scrollIntoView
dapat menjadi pengalaman yang membingungkan bagi pengguna tanpa semacam animasi.scrollIntoView
dengan parameter boolean. Saya akan mencoba dan mengirim permintaan tarik untuk caniuse.com nanti.<td>
elemen ke tampilan, melainkan harus menggulir orang tua mereka (<tr>
) dan itu berhasil.Solusi paling sederhana yang pernah saya lihat
Tutorial Di Sini
sumber
Ada metode untuk menggulir elemen langsung ke tampilan, tetapi jika Anda ingin menggulir ke titik relatif dari suatu elemen, Anda harus melakukannya secara manual:
Di dalam handler klik, dapatkan posisi elemen relatif terhadap dokumen, kurangi
20
dan gunakanwindow.scrollTo
:sumber
Lihatlah plugin jQuery.scrollTo . Ini demo .
Plugin ini memiliki banyak opsi yang melampaui apa yang ditawarkan scrollIntoView asli kepada Anda. Misalnya, Anda dapat mengatur pengguliran agar menjadi lancar, dan kemudian mengatur panggilan balik untuk saat pengguliran selesai.
Anda juga dapat melihat semua plugin JQuery yang ditandai dengan "gulir" .
sumber
Berikut ini adalah plugin jQuery cepat untuk memetakan fungsionalitas browser bawaan dengan baik:
sumber
Setelah coba-coba saya menemukan fungsi ini, berfungsi dengan iframe juga.
sumber
Hanya sebuah tip. Hanya bekerja pada firefox
Element.scrollIntoView ();
sumber
UI saya memiliki daftar gulir jempol vertikal di dalam thumbbar. Tujuannya adalah untuk membuat ibu jari saat ini tepat di tengah-tengah thumbbar. Saya mulai dari jawaban yang disetujui, tetapi menemukan bahwa ada beberapa penyesuaian untuk benar-benar memusatkan ibu jari saat ini. Semoga ini bisa membantu orang lain.
markup:
jquery:
sumber
Sederhana 2 langkah untuk menggulir ke bawah atau ke bawah.
Langkah 1: dapatkan ketinggian penuh dari scroll (percakapan) div.
Langkah 2: terapkan scrollTop pada div (percakapan) yang dapat digulir menggunakan nilai yang diperoleh di langkah1.
Langkah-langkah di atas harus diterapkan untuk setiap penambahan pada div percakapan.
sumber
Setelah mencoba menemukan solusi yang menangani setiap keadaan (opsi untuk menghidupkan gulir, melapisi objek setelah digulirkan ke tampilan, bekerja bahkan dalam keadaan yang tidak jelas seperti dalam iframe), akhirnya saya menulis solusi sendiri untuk ini. Karena tampaknya berfungsi ketika banyak solusi lain gagal, saya pikir saya akan membagikannya:
$target
adalah objek jQuery yang berisi objek yang ingin Anda gulir ke tampilan jika diperlukan.options
(opsional) dapat berisi opsi berikut yang dilewatkan dalam suatu objek:options.$container
- objek jQuery yang menunjuk ke elemen yang mengandung $ target (dengan kata lain, elemen dalam dom dengan scrollbar). Default ke jendela yang berisi elemen $ target dan cukup pintar untuk memilih jendela iframe. Ingatlah untuk memasukkan $ dalam nama properti.options.padding
- bantalan dalam piksel untuk ditambahkan di atas atau di bawah objek saat digulir ke tampilan. Dengan cara ini tidak tepat di tepi jendela. Default ke 20.options.instant
- jika disetel ke true, jQuery animate tidak akan digunakan dan gulir akan langsung muncul ke lokasi yang benar. Default ke false.options.animationOptions
- opsi jQuery apa pun yang ingin Anda sampaikan ke fungsi animate jQuery (lihat http://api.jquery.com/animate/ ). Dengan ini, Anda dapat mengubah durasi animasi atau menjalankan fungsi panggilan balik ketika gulir selesai. Ini hanya berfungsi jikaoptions.instant
disetel ke false. Jika Anda perlu memiliki animasi instan tetapi dengan panggilan balik, aturoptions.animationOptions.duration = 0
alih-alih menggunakanoptions.instant = true
.sumber