Saya sedang membangun toolbar yang akan dimasukkan ke dalam halaman. div yang akan dimasukkan akan secara default menampilkan: none . Adakah cara untuk meletakkan event listener di toolbar saya untuk didengarkan ketika sudah terlihat sehingga bisa diinisialisasi? atau haruskah saya meneruskan variabel dari halaman yang memuatnya?
Terima kasih
javascript
JD Isaacks
sumber
sumber
Jawaban:
Peristiwa Javascript berhubungan dengan Interaksi Pengguna , jika kode Anda cukup terorganisir, Anda harus dapat memanggil fungsi inisialisasi di tempat yang sama di mana visibilitas berubah (yaitu Anda tidak boleh mengubah
myElement.style.display
di banyak tempat, sebaliknya, panggil fungsi / metode yang ini dan hal lain yang mungkin Anda inginkan).sumber
Untuk selanjutnya, HTML Intersection Observer API baru adalah hal yang Anda cari. Hal ini memungkinkan Anda untuk mengonfigurasi callback yang dipanggil setiap kali satu elemen, yang disebut target, berpotongan dengan area pandang perangkat atau elemen yang ditentukan. Ini tersedia di versi terbaru Chrome, Firefox dan Edge. Lihat https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API untuk info lebih lanjut.
Contoh kode sederhana untuk mengamati display: none switching:
Beraksi: https://jsfiddle.net/elmarj/u35tez5n/5/
sumber
Saya mungkin sedikit terlambat, tetapi Anda bisa menggunakan MutationObserver untuk mengamati setiap perubahan pada elemen yang diinginkan. Jika ada perubahan yang terjadi, Anda hanya perlu memeriksa apakah elemen tersebut ditampilkan.
sumber
IntersectionObserver
- stackoverflow.com/a/52627221/2803743Setidaknya ada satu cara, tapi itu tidak terlalu bagus. Anda bisa mengumpulkan elemen untuk perubahan seperti ini:
Standar DOM juga menentukan peristiwa mutasi , tetapi saya tidak pernah memiliki kesempatan untuk menggunakannya, dan saya tidak yakin seberapa baik mereka didukung. Anda akan menggunakannya seperti ini:
Kode ini di luar kepala saya, jadi saya tidak yakin apakah itu akan berhasil.
Solusi terbaik dan termudah adalah memiliki panggilan balik dalam fungsi yang menampilkan target Anda.
sumber
Saya memiliki masalah yang sama dan membuat plugin jQuery untuk menyelesaikannya untuk situs kami.
https://github.com/shaunbowe/jquery.visibilityChanged
Berikut adalah cara Anda menggunakannya berdasarkan contoh Anda:
sumber
.is(':visible')
bersama dengansetTimeout
.Seperti yang dikatakan @figha, jika ini adalah halaman web Anda sendiri , Anda harus menjalankan apa pun yang Anda perlukan untuk menjalankan setelah Anda membuat elemen terlihat.
Namun, untuk tujuan menjawab pertanyaan (dan siapa pun yang membuat Ekstensi Chrome atau Firefox , di mana ini adalah kasus penggunaan umum), Ringkasan Mutasi dan Pengamat Mutasi akan mengizinkan perubahan DOM untuk memicu peristiwa.
Misalnya, memicu peristiwa untuk elemen dengan
data-widget
atribut yang ditambahkan ke DOM. Meminjam contoh luar biasa ini dari blog David Walsh :Tanggapan meliputi
added
,removed
,valueChanged
dan banyak lagi .valueChanged
mencakup semua atribut, termasukdisplay
dll.sumber
Anda juga dapat mencoba plugin jQuery ini: https://github.com/morr/jquery.appear
sumber
Hanya untuk mengomentari dukungan browser event listener DOMAttrModified:
Dukungan lintas browser
Peristiwa ini tidak diterapkan secara konsisten di berbagai browser, misalnya:
IE sebelum versi 9 sama sekali tidak mendukung peristiwa mutasi dan tidak menerapkan beberapa di antaranya dengan benar di versi 9 (misalnya, DOMNodeInserted)
WebKit tidak mendukung DOMAttrModified (lihat bug webkit 8191 dan solusinya)
"peristiwa nama mutasi", yaitu DOMElementNameChanged dan DOMAttributeNameChanged tidak didukung di Firefox (mulai versi 11), dan mungkin juga di browser lain.
Sumber: https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events
sumber
solusi saya:
sebagai contoh:
sumber