Saya punya div yang berisi beberapa konten yang ditambahkan dan dihapus secara dinamis, jadi tingginya sering berubah. Saya juga memiliki div yang benar-benar diposisikan tepat di bawahnya dengan javascript, jadi kecuali saya dapat mendeteksi ketika ketinggian div berubah, saya tidak dapat memposisikan div di bawahnya.
Jadi, bagaimana saya bisa mendeteksi ketika ketinggian div itu berubah? Saya berasumsi ada beberapa acara jQuery yang perlu saya gunakan, tapi saya tidak yakin yang mana yang harus dihubungkan.
javascript
jquery
Bob Somers
sumber
sumber
Jawaban:
Gunakan sensor ukuran dari pustaka css-element-queries:
https://github.com/marcj/css-element-queries
Ia menggunakan pendekatan berbasis peristiwa dan tidak membuang waktu cpu Anda. Bekerja di semua browser termasuk IE7 +.
sumber
Saya menulis sebuah plugin kadang-kadang kembali untuk pendengar attrchange yang pada dasarnya menambahkan fungsi pendengar pada perubahan atribut. Meskipun saya mengatakannya sebagai plugin, sebenarnya ini adalah fungsi sederhana yang ditulis sebagai plugin jQuery .. jadi jika Anda mau .. lepaskan kode plugin plugin dan gunakan fungsi inti.
Catatan: Kode ini tidak menggunakan polling
lihat demo sederhana ini http://jsfiddle.net/aD49d/
Halaman plugin: http://meetselva.github.io/attrchange/
Versi yang diperkecil: (1.68kb)
sumber
Anda dapat menggunakan acara DOMSubtreeModified
Tetapi ini akan menyala bahkan jika dimensi tidak berubah, dan menugaskan kembali posisi kapan pun itu dapat membuat hit performa. Dalam pengalaman saya menggunakan metode ini, memeriksa apakah dimensi telah berubah lebih murah sehingga Anda dapat mempertimbangkan menggabungkan keduanya.
Atau jika Anda secara langsung mengubah div (daripada div yang diubah oleh input pengguna dengan cara yang tidak dapat diprediksi, seperti jika itu contentEditable), Anda bisa memecat suatu peristiwa khusus kapan pun Anda melakukannya.
Kelemahan: IE dan Opera tidak mengimplementasikan acara ini.
sumber
Inilah cara saya baru-baru ini menangani masalah ini:
Saya tahu saya terlambat beberapa tahun ke pesta, anggap saja jawaban saya dapat membantu beberapa orang di masa depan, tanpa harus mengunduh plugin apa pun.
sumber
Anda bisa menggunakan
MutationObserver
kelas.MutationObserver
memberikan pengembang cara untuk bereaksi terhadap perubahan dalam DOM. Ini dirancang sebagai pengganti Acara Mutasi yang ditentukan dalam spesifikasi Acara DOM3.Contoh ( sumber )
sumber
Ada plugin jQuery yang dapat menangani ini dengan sangat baik
http://www.jqui.net/jquery-projects/jquery-mutate-official/
di sini adalah demo dari itu dengan skenario yang berbeda tentang kapan perubahan ketinggian, jika Anda mengubah ukuran div berbatasan merah.
http://www.jqui.net/demo/mutate/
sumber
setTimeout
, jadi itu akan menjadi 1ms + [waktu yang diperlukan untuk melakukan pemeriksaan] singkatnya, tetapi idenya adalah untuk mendengarkan secara konstan, setelah Anda melakukan pemicunya lagi, seperti sebuah antrian. Saya yakin saya bisa melakukannya lebih baik tetapi tidak banyak waktu.Menanggapi user007:
Jika ketinggian elemen Anda berubah karena item ditambahkan ke dalamnya menggunakan
.append()
Anda tidak perlu mendeteksi perubahan ketinggian. Cukup tambahkan reposisi elemen kedua Anda di fungsi yang sama di mana Anda menambahkan konten baru ke elemen pertama Anda.Seperti dalam:
Contoh Kerja
sumber
Anda dapat membuat setInterval sederhana.
EDIT:
Ini adalah contoh dengan kelas. Tetapi Anda dapat melakukan sesuatu yang paling mudah.
sumber
Anda dapat menggunakan ini, tetapi hanya mendukung Firefox dan Chrome.
sumber
Cukup mendasar tetapi berfungsi:
sumber