Saya membuat obrolan menggunakan permintaan ajax di rails dan saya mencoba untuk mendapatkan div untuk menggulir ke bawah tanpa banyak keberuntungan.
Saya membungkus semuanya dalam div ini:
#scroll {
height:400px;
overflow:scroll;
}
Apakah ada cara untuk tetap menggulirnya ke bawah secara default menggunakan JS?
Apakah ada cara untuk tetap menggulirnya ke bawah setelah permintaan ajax?
javascript
html
ajax
dMix
sumber
sumber
Ini jauh lebih mudah jika Anda menggunakan jQuery scrollTop :
sumber
$("#mydiv").scrollTop(function() { return this.scrollHeight; });
Anda dapat menggunakan kode berikut:
Untuk melakukan gulir yang lancar dengan JQuery:
Lihat contoh di JSFiddle
Inilah mengapa ini bekerja:
Ref: scrollTop , scrollHeight , clientHeight
sumber
menggunakan jQuery animate :
sumber
Bekerja dari jQuery 1.6
https://api.jquery.com/scrollTop/
http://api.jquery.com/prop/
sumber
Metode yang lebih baru yang bekerja di semua browser saat ini :
sumber
gulir halus dengan Javascript:
document.getElementById('messages').scrollIntoView({ behavior: 'smooth', block: 'end' });
sumber
Jika Anda tidak ingin mengandalkan
scrollHeight
, kode berikut ini membantu:sumber
1E10
). Sejumlah kecil bekerjaMenggunakan jQuery, scrollTop digunakan untuk mengatur posisi vertikal scollbar untuk setiap elemen yang diberikan. ada juga scroll jquery yang bagusUntuk plugin yang digunakan untuk menggulir dengan animasi dan berbagai opsi ( demo )
jika Anda ingin menggunakan metode animate jQuery untuk menambahkan animasi saat menggulir ke bawah, periksa cuplikan berikut:
sumber
Saya telah mengalami masalah yang sama, tetapi dengan kendala tambahan: Saya tidak memiliki kendali atas kode yang menambahkan elemen baru ke wadah gulir. Tidak ada satu pun contoh yang saya temukan di sini yang memungkinkan saya melakukan hal itu. Inilah solusi yang akhirnya saya dapatkan.
Ini menggunakan
Mutation Observers
( https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver ) yang membuatnya hanya dapat digunakan di browser modern (meskipun polyfill ada)Jadi pada dasarnya kode tidak hanya itu:
Saya membuat biola untuk menunjukkan konsep: https://jsfiddle.net/j17r4bnk/
sumber
<div class="abc"><div data-bind=attr : {'id': myId } ></div></div>
dalam kode ini myID adalah variabel. Bagaimana saya bisa mengakses id ini dalam skrip.Javascript atau jquery:
Css:
sumber
Menemukan ini sangat membantu, terima kasih.
Untuk orang-orang Angular 1.X di luar sana:
Hanya karena pembungkus elemen jQuery versus elemen HTML DOM menjadi sedikit membingungkan dengan sudut.
Juga untuk aplikasi obrolan, saya menemukan membuat tugas ini setelah obrolan Anda dimuat agar bermanfaat, Anda juga mungkin perlu menampar waktu tunggu singkat.
sumber
tambahan kecil: hanya menggulung, jika baris terakhir sudah terlihat. jika digulirkan sedikit, tinggalkan konten di tempatnya (perhatian: tidak diuji dengan ukuran font yang berbeda. ini mungkin memerlukan beberapa penyesuaian di dalam "> = perbandingan"):
sumber
Sama seperti potongan bonus. Saya menggunakan sudut dan mencoba menggulir utas pesan ke bawah ketika pengguna memilih percakapan yang berbeda dengan pengguna. Untuk memastikan bahwa gulir bekerja setelah data baru dimuat ke div dengan pengulangan ng untuk pesan, cukup bungkus cuplikan gulir dalam batas waktu.
Itu akan memastikan bahwa acara gulir dipecat setelah data telah dimasukkan ke DOM.
sumber
setTimeout(function() { ... }, n)
Anda juga dapat, menggunakan jQuery, melampirkan animasi ke
html,body
dokumen melalui:$("html,body").animate({scrollTop:$("#div-id")[0].offsetTop}, 1000);
yang akan menghasilkan gulir halus ke bagian atas div dengan id "div-id".
sumber
Java Script:
document.getElementById('messages').scrollIntoView(false);
Gulir ke baris terakhir dari konten yang ada.
sumber
Ini akan memungkinkan Anda menggulir ke bawah mengenai ketinggian dokumen
sumber
Metode yang sangat sederhana adalah mengatur
scroll to
ketinggian div.sumber
Gulir ke elemen terakhir di dalam div:
sumber
Pada aplikasi Angular 6 saya, saya baru saja melakukan ini:
Fungsi clearInterval (interval) akan menghentikan timer untuk memungkinkan gulir manual atas / bawah.
sumber
Skenario Saya: Saya memiliki daftar string, di mana saya harus menambahkan string yang diberikan oleh pengguna dan gulir ke akhir daftar secara otomatis. Saya memiliki ketinggian tetap tampilan daftar, setelah itu harus meluap.
Saya mencoba jawaban @Jeremy Ruten, itu berhasil, tetapi bergulir ke elemen (n-1). Jika ada yang menghadapi masalah jenis ini, Anda bisa menggunakan
setTimeOut()
metode penyelesaian masalah. Anda perlu mengubah kode di bawah ini:Ini adalah tautan StcakBlitz yang saya buat yang menunjukkan masalah dan solusinya: https://stackblitz.com/edit/angular-ivy-x9esw8
sumber
Saya tahu ini adalah pertanyaan lama, tetapi tidak ada solusi yang berhasil untuk saya. Saya akhirnya menggunakan offset (). Top untuk mendapatkan hasil yang diinginkan. Inilah yang saya gunakan untuk menggulir layar dengan lembut ke pesan terakhir di aplikasi obrolan saya:
Saya harap ini membantu orang lain.
sumber
Terkadang yang paling sederhana adalah solusi terbaik: Saya tidak tahu apakah ini akan membantu, itu membantu saya untuk menggulirnya seperti yang pernah saya inginkan juga. Semakin tinggi "y =", semakin turun ke bawah dan tentu saja "0" berarti atas, jadi misalnya "1000" dapat berada di bawah, atau "2000" atau "3000" dan seterusnya, tergantung berapa lama Anda halaman adalah. Ini biasanya bekerja di tombol dengan klik atau onmouseover.
sumber
Atur jarak dari bagian atas elemen yang dapat digulir menjadi ketinggian total elemen.
sumber
Anda dapat menggunakan Metode DOM scrollIntoView HTML seperti ini:
sumber
gunakan:
atau periksa gulir ke bawah:
sumber
Jika ini dilakukan untuk menggulir ke bagian bawah jendela obrolan, lakukan hal berikut
Gagasan untuk menggulir ke div tertentu dalam obrolan adalah sebagai berikut
1) Setiap obrolan yang terdiri dari Orang, waktu dan pesan dijalankan dalam loop untuk dengan kelas chatContentbox
2) querySelectorAll menemukan semua array tersebut. Itu bisa 400 node (400 obrolan)
3) pergi ke yang terakhir
4) scrollIntoView ()
sumber
scrollIntoView
, jadi tidak perlu menambahkan satu lagi.