Bagaimana cara memanggil fungsi setelah ukuran jendela browser SELESAI?
Saya mencoba melakukannya seperti itu, tetapi saya mengalami masalah. Saya menggunakan fungsi acara JQuery Resize:
$(window).resize(function() {
... // how to call only once the browser has FINISHED resizing?
});
Namun, fungsi ini dipanggil terus menerus jika pengguna mengubah ukuran jendela browser secara manual. Artinya, ia mungkin memanggil fungsi ini puluhan kali dalam selang waktu singkat.
Bagaimana cara memanggil fungsi pengubahan ukuran hanya satu kali (setelah jendela browser selesai mengubah ukuran)?
MEMPERBARUI
Juga tanpa harus menggunakan variabel global.
javascript
jquery
html
nickb
sumber
sumber
Jawaban:
Berikut adalah contoh penggunaan instruksi thejh
Anda dapat menyimpan id referensi ke setInterval atau setTimeout mana pun. Seperti ini:
sumber
Debounce .
Catatan, Anda dapat menggunakan metode ini untuk apa pun yang ingin Anda hapus (peristiwa penting, dll).
Sesuaikan parameter batas waktu untuk mendapatkan efek optimal yang diinginkan.
sumber
func
, denganthis
penunjuk internal menunjuk kescope
, dan denganArray.prototype.slice.call(args)
(yang menghasilkan array standar dariargs
) sebagai argumenAnda dapat menggunakan
setTimeout()
danclearTimeout()
berhubungan denganjQuery.data
:Memperbarui
Saya menulis ekstensi untuk meningkatkan default
on
(&bind
) -event-handler jQuery . Ini melampirkan fungsi pengendali kejadian untuk satu atau lebih kejadian ke elemen yang dipilih jika kejadian itu tidak dipicu untuk interval tertentu. Ini berguna jika Anda ingin mengaktifkan callback hanya setelah penundaan, seperti peristiwa pengubahan ukuran, atau lainnya. https://github.com/yckart/jquery.unevent.jsGunakan seperti yang lainnya
on
ataubind
-event handler, kecuali Anda bisa meneruskan parameter ekstra sebagai yang terakhir:http://jsfiddle.net/ARTsinn/EqqHx/
sumber
sumber
Hanya untuk menambah hal di atas, adalah umum untuk mendapatkan acara pengubahan ukuran yang tidak diinginkan karena bilah gulir muncul dan keluar, berikut adalah beberapa kode untuk menghindarinya:
lihat jsfiddle
sumber
Underscore.js memiliki beberapa metode bagus untuk tugas ini:
throttle
dandebounce
. Meskipun Anda tidak menggunakan Garis Bawah, lihat sumber fungsi ini. Berikut contohnya:sumber
Ini adalah pendekatan saya:
Resize-event-listener menangkap semua panggilan resize yang masuk, membuat fungsi timeout untuk masing-masing panggilan dan menyimpan pengenal timeout bersama dengan nomor iterasi yang diawali dengan
'id-'
(untuk dapat digunakan sebagai kunci array) ditos
-array.setiap kali, timout terpicu, ia memanggil
fn
-fungsi, yang memeriksa, apakah itu waktu tunggu terakhir dalamtos
larik (fungsi fn menghapus setiap waktu tunggu yang dieksekusi). jika true (=if(len-1 == 0)
), pengubahan ukuran selesai.sumber
jQuery menyediakan
off
metode untuk menghapus event handlersumber