Saya menggunakan JQuery sebagai berikut:
$(window).resize(function() { ... });
Namun, tampaknya jika orang tersebut mengubah ukuran jendela browser secara manual dengan menyeret tepi jendela untuk membuatnya lebih besar / lebih kecil, .resize
acara di atas akan menyala beberapa kali.
Pertanyaan: Bagaimana saya memanggil fungsi SETELAH ukuran jendela browser selesai (sehingga acara hanya menyala sekali)?
javascript
jquery
sarah
sumber
sumber
Jawaban:
Berikut ini modifikasi solusi CMS yang dapat dipanggil di banyak tempat dalam kode Anda:
Pemakaian:
Solusi CMS baik-baik saja jika Anda hanya memanggilnya sekali, tetapi jika Anda menyebutnya berkali-kali, misalnya jika bagian kode Anda yang berbeda mengatur callback terpisah untuk mengubah ukuran jendela, maka itu akan gagal jika mereka berbagi
timer
variabel.Dengan modifikasi ini, Anda memberikan id unik untuk setiap panggilan balik, dan ID unik tersebut digunakan untuk memisahkan semua acara timeout.
sumber
Saya lebih suka membuat acara:
Inilah cara Anda membuatnya:
Anda dapat memiliki ini di file javascript global di suatu tempat.
sumber
Saya menggunakan fungsi berikut untuk menunda tindakan berulang, itu akan bekerja untuk kasus Anda:
Pemakaian:
Fungsi callback diteruskan, akan dijalankan hanya ketika panggilan terakhir untuk menunda telah dilakukan setelah jumlah waktu yang ditentukan, jika tidak timer akan diatur ulang, saya menemukan ini berguna untuk tujuan lain seperti mendeteksi ketika pengguna berhenti mengetik, dll. ..
sumber
$(window).resize
) karena mereka semua akan berbagitimer
variabel. Lihat jawaban saya di bawah ini untuk solusi yang diusulkan.Jika Anda memiliki Underscore.js diinstal, Anda dapat:
sumber
Beberapa solusi yang disebutkan sebelumnya tidak bekerja untuk saya, meskipun mereka lebih umum digunakan. Atau saya telah menemukan ini yang melakukan ukuran pada pekerjaan di jendela:
sumber
Terima kasih banyak kepada David Walsh, ini adalah versi vanilla dari garis bawah garis bawah.
Kode:
Penggunaan sederhana:
Ref: http://davidwalsh.name/javascript-debounce-function
sumber
Sebenarnya, seperti yang saya tahu, Anda tidak dapat melakukan beberapa tindakan tepat ketika mengubah ukuran mati, hanya karena Anda tidak tahu tindakan pengguna di masa depan. Tetapi Anda dapat mengasumsikan waktu berlalu antara dua peristiwa pengubahan ukuran, jadi jika Anda menunggu sedikit lebih dari waktu ini dan tidak ada pengubahan ukuran, Anda dapat memanggil fungsi Anda.
Ide adalah yang kami gunakan
setTimeout
dan id untuk menyimpan atau menghapusnya. Misalnya kita tahu bahwa waktu antara dua peristiwa pengubahan ukuran adalah 500ms, oleh karena itu kami akan menunggu 750ms.sumber
Menyatakan pendengar yang tertunda secara global:
Dan di bawah ini gunakan pendengar untuk
resized
acara yang Anda inginkan:sumber
Ini bekerja untuk saya. Lihat solusi ini - https://alvarotrigo.com/blog/firing-resize-event-only-once-when-resizing-is-finished/
sumber
Plugin jQuery sederhana untuk acara pengubahan ukuran jendela yang tertunda.
SINTAKSIS:
Tambahkan fungsi baru untuk mengubah ukuran acara
Hapus fungsi (dengan mendeklarasikan ID-nya) yang ditambahkan sebelumnya
Hapus semua fungsi
PEMAKAIAN:
PENGGUNAAN OUTPUT:
PLUGIN:
sumber
Dengan asumsi bahwa kursor mouse harus kembali ke dokumen setelah mengubah ukuran jendela, kita dapat membuat perilaku seperti panggilan balik dengan peristiwa onmouseover. Jangan lupa bahwa solusi ini mungkin tidak berfungsi untuk layar yang mendukung sentuhan seperti yang diharapkan.
sumber
Inilah yang saya terapkan:
$ (window) .resize (function () {setTimeout (someFunction, 500);});
kita dapat menghapus setTimeout jika kita berharap ukurannya terjadi kurang dari
500ms
Semoga berhasil...
sumber