Saya menggunakan jQuery di situs saya dan saya ingin memicu tindakan tertentu ketika div tertentu dibuat terlihat.
Apakah mungkin untuk melampirkan semacam event handler "isvisible" ke div sewenang-wenang dan menjalankan kode tertentu ketika div dibuat terlihat?
Saya ingin sesuatu seperti kodesemu berikut:
$(function() {
$('#contentDiv').isvisible(function() {
alert("do something");
});
});
Kode lansiran ("lakukan sesuatu") tidak boleh diaktifkan sampai contentDiv benar-benar terlihat.
Terima kasih.
javascript
jquery
frankadelic
sumber
sumber
Jawaban:
Anda selalu dapat menambahkan metode .show () asli sehingga Anda tidak harus memicu acara setiap kali Anda menunjukkan sesuatu atau jika Anda membutuhkannya untuk bekerja dengan kode lawas:
Ekstensi jquery:
Contoh penggunaan:
Ini secara efektif memungkinkan Anda melakukan sesuatu beforeShow dan afterShow sambil tetap menjalankan perilaku normal dari metode .show () yang asli.
Anda juga bisa membuat metode lain sehingga Anda tidak perlu mengganti metode .show () yang asli.
sumber
fadeTo
fungsi tidak berfungsi dengan baik setelah menerapkan fungsi iniMasalahnya sedang ditangani oleh pengamat mutasi DOM . Mereka memungkinkan Anda untuk mengikat pengamat (fungsi) ke acara mengubah konten, teks atau atribut elemen dom.
Dengan rilis IE11, semua browser utama mendukung fitur ini, periksa http://caniuse.com/mutationobserver
Contoh kode adalah sebagai berikut:
sumber
Tidak ada acara asli yang dapat Anda kaitkan untuk ini, tetapi Anda dapat memicu suatu peristiwa dari skrip Anda setelah Anda membuat div terlihat menggunakan. fungsi pemicu
misalnya
sumber
show()
dipanggil dari beberapa tempat selain dari blok kode yang dibahas di atas?onIsVisible
karena penggunaan "isVisible" sedikit ambigu sekarang.Anda dapat menggunakan plugin Live Query jQuery . Dan tulis kode sebagai berikut:
Maka setiap kali contentDiv terlihat, "lakukan sesuatu" akan diperingatkan!
sumber
Solusi redsquare adalah jawaban yang tepat.
Tetapi sebagai solusi IN-THEORY Anda dapat menulis fungsi yang memilih elemen yang dikelompokkan berdasarkan
.visibilityCheck
( tidak semua elemen yang terlihat ) dan memeriksavisibility
nilai propertinya; jikatrue
kemudian lakukan sesuatu.Setelah itu, fungsi tersebut harus dilakukan secara berkala menggunakan
setInterval()
fungsi tersebut. Anda dapat menghentikan timer menggunakanclearInterval()
panggilan keluar yang berhasil.Ini sebuah contoh:
Anda juga dapat melakukan beberapa peningkatan kinerja di atasnya, namun solusinya pada dasarnya tidak masuk akal untuk digunakan dalam tindakan. Begitu...
sumber
display:none
?Kode berikut (ditarik dari http://maximeparmentier.com/2012/11/06/bind-show-hide-events-with-jquery/ ) akan memungkinkan Anda untuk menggunakan
$('#someDiv').on('show', someFunc);
.sumber
el.apply(this, arguments)
untuk memperbaikinya.Jika Anda ingin memicu acara di semua elemen (dan elemen turunan) yang benar-benar dibuat terlihat, oleh $ .show, toggle, toggleClass, addClass, atau removeClass:
Dan sekarang elemen Anda:
Anda bisa menambahkan penggantian ke fungsi jQuery tambahan dengan menambahkannya ke array di bagian atas (seperti "attr")
sumber
pemicu acara sembunyikan / tunjukkan berdasarkan Glenns ideea: dihapus toggle karena ia memunculkan / sembunyikan dan kami tidak ingin 2 api untuk satu acara
sumber
Saya punya masalah yang sama dan membuat plugin jQuery untuk menyelesaikannya untuk situs kami.
https://github.com/shaunbowe/jquery.visibilityChanged
Inilah cara Anda menggunakannya berdasarkan contoh Anda:
sumber
Gunakan jQuery Waypoints:
Contoh lain di situs jQuery Waypoints .
sumber
Apa yang membantu saya di sini adalah ResizeObserver spec polyfill baru-baru ini :
Perhatikan bahwa ini adalah crossbrowser dan performant (tidak ada polling).
sumber
Saya melakukan fungsi setinterval sederhana untuk mencapai ini. Jika elemen dengan kelas div1 terlihat, itu mengatur div2 agar terlihat. Saya tahu bukan metode yang baik, tetapi perbaikan sederhana.
sumber
Anda juga dapat mencoba plugin jQueryerge seperti yang disebutkan di thread paralel https://stackoverflow.com/a/3535028/741782
sumber
Dukungan ini memudahkan dan memicu acara setelah animasi selesai! [diuji pada jQuery 2.2.4]
Terinspirasi Oleh http://viralpatel.net/blogs/jquery-trigger-custom-event-show-hide-element/
sumber
Cukup ikat pemicu dengan pemilih dan masukkan kode ke dalam peristiwa pemicu:
sumber
Ada plugin jQuery yang tersedia untuk menonton perubahan atribut DOM,
https://github.com/darcyclarke/jQuery-Watch-Plugin
Plugin membungkus Yang perlu Anda lakukan adalah mengikat MutationObserver
Anda kemudian dapat menggunakannya untuk menonton div menggunakan:
sumber
Semoga ini akan melakukan pekerjaan dengan cara paling sederhana:
sumber
Saya mengubah pemicu acara sembunyikan / tampilkan dari Catalint berdasarkan ide Glenns. Masalah saya adalah saya punya aplikasi modular. Saya mengubah antara modul yang menunjukkan dan menyembunyikan orangtua divs. Kemudian ketika saya menyembunyikan modul dan menunjukkan yang lain, dengan metodenya saya memiliki keterlambatan yang terlihat ketika saya mengubah antar modul. Saya hanya kadang-kadang perlu menyulut acara ini, dan pada beberapa anak spesial. Jadi saya memutuskan untuk memberi tahu anak-anak dengan kelas "displayObserver"
Kemudian ketika seorang anak ingin mendengarkan acara "show" atau "hide" saya harus menambahkan dia kelas "displayObserver", dan ketika itu tidak ingin melanjutkan mendengarkannya, saya menghapusnya kelas
Saya berharap bantuan
sumber
Salah satu cara untuk melakukan ini.
Hanya berfungsi pada perubahan visibilitas yang dibuat oleh perubahan kelas css, tetapi dapat diperluas untuk mengawasi perubahan atribut juga.
sumber
solusi saya:
contoh penggunaan:
sumber
sumber
Kontrol otomatis kode ini tidak memerlukan kueri kontrol yang terlihat atau tidak terlihat
sumber