Saya memiliki div yang hanya 300 piksel besar dan saya ingin ketika halaman memuat gulir ke bagian bawah konten. Div ini memiliki konten yang ditambahkan secara dinamis ke dalamnya dan harus tetap digulir sepenuhnya. Sekarang jika pengguna memutuskan untuk menggulir ke atas, saya tidak ingin itu melompat kembali ke bawah sampai pengguna menggulir ke bawah lagi
Apakah mungkin untuk memiliki div yang akan tetap digulir ke bawah kecuali jika pengguna menggulir ke atas dan ketika pengguna menggulir kembali ke bawah itu perlu menjaga dirinya di bagian bawah bahkan ketika konten dinamis baru ditambahkan. Bagaimana cara saya membuat ini.
{position : relative; bottom:0;}
. Hapus properti css setelah pengguna memiliki gulir.Jawaban:
Ini mungkin membantu Anda:
[EDIT], untuk mencocokkan komentar ...
setiap kali konten ditambahkan, panggil fungsi updateScroll (), atau atur timer:
jika Anda ingin memperbarui HANYA jika pengguna tidak bergerak:
sumber
setInterval
masalah ringan ini.Saya bisa menjalankan ini dengan CSS saja.
Caranya adalah dengan menggunakan
display: flex;
danflex-direction: column-reverse;
Browser memperlakukan bagian bawah seperti bagian atas. Dengan asumsi browser yang Anda targetkan mendukung
flex-box
, satu-satunya peringatan adalah bahwa markup harus dalam urutan terbalik.Berikut ini contoh kerjanya. https://codepen.io/jimbol/pen/YVJzBg
sumber
overflow:auto; display:flex; flex-direction:column-reverse;
ke pembungkus luar alih-alih pembungkus dalam.Saya baru saja mengimplementasikan ini dan mungkin Anda dapat menggunakan pendekatan saya.
Katakanlah kita memiliki HTML berikut:
Kemudian kita dapat memeriksa apakah itu digulir ke bawah dengan:
scrollHeight memberi Anda ketinggian elemen, termasuk area yang tidak terlihat karena meluap. clientHeight memberi Anda ketinggian CSS atau berkata dengan cara lain, ketinggian elemen yang sebenarnya. Kedua metode mengembalikan ketinggian tanpa
margin
, jadi Anda tidak perlu khawatir tentang itu. scrollTop memberi Anda posisi gulir vertikal. 0 adalah top dan max adalah scrollHeight dari elemen minus tinggi elemen itu sendiri. Saat menggunakan bilah gulir itu bisa sulit (itu di Chrome bagi saya) untuk mendapatkan bilah gulir sampai ke bawah. jadi saya melempar 1px ketidaktepatan. JadiisScrolledToBottom
akan benar bahkan jika bilah gulir adalah 1px dari bawah. Anda dapat mengatur ini untuk apa pun yang terasa benar bagi Anda.Maka itu hanya masalah pengaturan scrollTop elemen ke bawah.
Saya telah membuat biola bagi Anda untuk menunjukkan konsep: http://jsfiddle.net/dotnetCarpenter/KpM5j/
EDIT: Ditambahkan potongan kode untuk memperjelas saat
isScrolledToBottom
initrue
.Tempel bilah gulir ke bawah
sumber
if(!isScrolledToBottom)
: tes terlihat salah bagi saya (dan tidak berfungsi dalam kode saya sampai saya memperbaikinya).out.scrollHeight - out.clientHeight <= out.scrollTop + 1
. Apakah Anda menggunakan padding di CSS Anda?document.getScrollingElement
seperti yang disarankan di sini: stackoverflow.com/questions/36227559/scrolltop-always-returns-0/…Demo langsung: http://jsfiddle.net/KGfG2/
sumber
sumber
Pada tahun 2020, Anda dapat menggunakan css snap , tetapi sebelum Chrome 81 perubahan tata letak tidak akan memicu re-snap , chat css murni ui berfungsi di Chrome 81, Anda juga dapat memeriksa Dapatkah saya menggunakan CSS snap .
Demo ini akan mengambil elemen terakhir jika terlihat, gulir ke bawah untuk melihat efeknya.
sumber
Run code snippet
untuk melihat efeknya. (PS: JikaRun code snippet
tidak berfungsi, coba ini: https://jsfiddle.net/Yeshen/xm2yLksu/3/ )Bagaimana cara kerjanya:
Overflow default adalah gulir dari atas ke bawah.
transform: rotate(180deg)
dapat membuatnya gulir atau memuat blok dinamis dari bawah ke atas.https://blog.csdn.net/yeshennet/article/details/88880252
sumber
Run code snippet
, langsung lihat efeknya.Ini akan menghitung Posisi ScrollTop dari ketinggian
#yourDivID
menggunakan$(document).height()
properti sehingga bahkan jika konten dinamis ditambahkan ke div scroller akan selalu berada di posisi bawah. Semoga ini membantu. Tetapi ia juga memiliki bug kecil bahkan jika kita gulir ke atas dan meninggalkan pointer mouse dari penggulung itu secara otomatis akan datang ke posisi bawah. Jika seseorang dapat memperbaikinya juga akan menyenangkan.sumber
Ini versi saya berdasarkan jawaban dotnetCarpenter. Pendekatan saya adalah jQuery murni dan saya menamai variabel untuk membuat hal-hal sedikit lebih jelas .. Apa yang terjadi adalah jika tinggi konten lebih besar maka wadah kita gulir jarak ekstra ke bawah untuk mencapai hasil yang diinginkan.
Bekerja di IE dan chrome ..
sumber
Jawaban Jim Hall lebih disukai karena walaupun memang tidak menggulir ke bawah ketika Anda digulir ke atas, itu juga CSS murni.
Sayangnya, ini bukan solusi yang stabil: Di chrome (mungkin karena masalah 1-px yang dijelaskan oleh dotnetCarpenter di atas),
scrollTop
berperilaku tidak akurat dengan 1 piksel, bahkan tanpa interaksi pengguna (pada penambahan elemen). Anda dapat mengaturscrollTop = scrollHeight - clientHeight
, tetapi itu akan membuat div tetap di posisinya ketika elemen lain ditambahkan, alias fitur "keep yourself at bottom" tidak berfungsi lagi.Jadi, singkatnya, menambahkan sejumlah kecil Javascript (mendesah) akan memperbaikinya dan memenuhi semua persyaratan:
Sesuatu seperti https://codepen.io/anon/pen/pdrLEZ ini (contoh oleh Coo), dan setelah menambahkan elemen ke daftar, juga berikut ini:
di mana 29 adalah ketinggian satu baris.
Jadi, ketika pengguna menggulir ke atas setengah baris (jika itu mungkin?), Javascript akan mengabaikannya dan gulir ke bawah. Tapi saya kira ini bisa diabaikan. Dan, itu memperbaiki Chrome 1 px thingy.
sumber
Berikut ini solusinya berdasarkan pada posting blog oleh Ryan Hunt . Itu tergantung pada
overflow-anchor
properti CSS, yang menyematkan posisi gulir ke elemen di bagian bawah konten yang digulir.Perhatikan bahwa
overflow-anchor
saat ini tidak berfungsi di Safari atau Edge, jadi solusi ini saat ini tidak berfungsi di semua browser.sumber
Anda dapat menggunakan sesuatu seperti ini,
sumber
Inilah cara saya mendekatinya. Tinggi div saya adalah 650px. Saya memutuskan bahwa jika ketinggian gulir berada dalam 150px dari bawah maka gulir otomatis. Lain, tinggalkan untuk pengguna.
sumber