Saya memiliki 20 item daftar di dalam div yang hanya dapat menampilkan 5 item sekaligus. Apa cara yang baik untuk menggulir ke item # 10, dan kemudian item # 20? Saya tahu ketinggian semua barang.
The scrollTo
Plugin melakukan hal ini, tetapi sumbernya tidak super mudah dipahami tanpa benar-benar masuk ke dalamnya. Saya tidak ingin menggunakan plugin ini.
Katakanlah saya memiliki fungsi yang mengambil 2 elemen $parentDiv
, $innerListItem
, tidak $innerListItem.offset().top
juga $innerListItem.positon().top
memberi saya scrollTop benar untuk $ parentDiv.
$("#container").scrollTo(target, duration, options)
. Target hanyalah sebuah#anchor
. SelesaiJawaban:
Ini
$innerListItem.position().top
sebenarnya relatif terhadap.scrollTop()
leluhur pertama yang diposisikan. Jadi cara untuk menghitung nilai yang benar$parentDiv.scrollTop()
adalah dengan memulai dengan memastikan bahwa$parentDiv
diposisikan. Jika belum memiliki eksplisitposition
, gunakanposition: relative
. Unsur-unsur$innerListItem
dan semua leluhurnya hingga$parentDiv
perlu tidak memiliki posisi eksplisit. Sekarang Anda dapat menggulir ke$innerListItem
dengan:sumber
Ini adalah plugin saya sendiri (akan memposisikan elemen di atas daftar. Khusus untuk
overflow-y : auto
. Mungkin tidak bekerja denganoverflow-x
!):CATATAN :
elem
adalah pemilih HTML elemen tempat halaman akan digulirkan. Apa pun didukung oleh jQuery, seperti:#myid
,div.myclass
,$(jquery object)
, [object dom], dllJika Anda tidak perlu dianimasikan, gunakan:
Cara Penggunaan:
Catatan:
#innerItem
bisa di mana saja di dalam#overflow_div
. Tidak harus menjadi anak langsung.Diuji dalam Firefox (23) dan Chrome (28).
Jika Anda ingin menggulir seluruh halaman, periksa pertanyaan ini .
sumber
elem
?? Anda tidak menjelaskannya sama sekali.$(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem, $(this)).offset().top);
- salam$(this).scrollTop() - $(this).offset().top + $(elem).offset().top - 10
.Saya telah menyesuaikan jawaban Glenn Moss untuk memperhitungkan fakta bahwa overflow div mungkin tidak ada di bagian atas halaman.
Saya menggunakan ini pada aplikasi google maps dengan templat responsif. Pada resolusi> 800px, daftar berada di sisi kiri peta. Pada resolusi <800 daftar berada di bawah peta.
sumber
Jawaban di atas akan memposisikan elemen dalam di bagian atas elemen overflow bahkan jika itu terlihat di dalam elemen overflow. Saya tidak ingin itu jadi saya memodifikasinya untuk tidak mengubah posisi gulir jika elemen tersebut terlihat.
sumber
Saya menulis 2 fungsi ini untuk membuat hidup saya lebih mudah:
Dan gunakan mereka:
sumber
elem.offset().top
sedang menghitung dari bagian atas layar. Saya ingin itu menghitung dari elemen induk. Bagaimana aku melakukan itu ?Setelah bermain dengannya untuk waktu yang sangat lama, inilah yang saya pikirkan:
dan saya menyebutnya seperti ini
sumber