Jadi saya saat ini menggunakan sesuatu seperti:
$(window).resize(function(){resizedw();});
Tapi ini dipanggil berkali-kali saat proses mengubah ukuran berlangsung. Apakah mungkin untuk menangkap suatu peristiwa ketika itu berakhir?
Jadi saya saat ini menggunakan sesuatu seperti:
$(window).resize(function(){resizedw();});
Tapi ini dipanggil berkali-kali saat proses mengubah ukuran berlangsung. Apakah mungkin untuk menangkap suatu peristiwa ketika itu berakhir?
.one()
sehingga hanya dijalankan setelah semua pengubahan ukuran dilakukan dan tidak berulang?Jawaban:
Saya beruntung dengan rekomendasi berikut: http://forum.jquery.com/topic/the-resizeend-event
Inilah kodenya sehingga Anda tidak perlu menggali melalui tautan & sumber posnya:
Terima kasih sime.vidas untuk kodenya!
sumber
new Date(-1E12)
- yaitu JSLint memperingatkan tentang penggunaan00
.rtime: Date; .... if (+new Date() - +rtime < delta)
dan dalam fungsi resizeend naskah harus fungsi panah seperti iniresizeend=()=>
. Karena dalam fungsi resizeend,this
merujuk ke objek jendela.Anda bisa menggunakan
setTimeout()
danclearTimeout()
Contoh kode pada jsfiddle .
sumber
$(document)
, deteksi mouse akan terbatas pada pengguna yang menjalankan Microsoft Windows dan versi Internet Explorer yang rentanIni adalah kode yang saya tulis sesuai dengan jawaban @Mark Coleman:
Mark terima kasih!
sumber
resizeTimer
adalah variabel global, artinya tidak didefinisikanwindow
, jadi persis sama dengan di sini, hanya contoh ini yang lebih baik karena Anda tidak perlu mendefinisikan variabel secara eksternal. dan masuk akal untuk menambahkan variabel ini kewindow
objek karena itu adalah objek yang diikat oleh pendengar acara.Internet Explorer menyediakan acara pengubahan ukuran . Peramban lain akan memicu acara pengubahan ukuran berkali-kali saat Anda mengubah ukuran.
Ada jawaban hebat lainnya di sini yang menunjukkan cara menggunakan setTimeout dan .throttle ,.debounce metode dari lodash dan garis bawah, jadi saya akan menyebutkan plugin jQuery throttle-debounce dari Ben Alman yang memenuhi apa yang Anda cari.
Misalkan Anda memiliki fungsi ini yang ingin Anda picu setelah mengubah ukuran:
Contoh Throttle
Dalam contoh berikut,
onResize()
hanya akan dipanggil sekali setiap 250 milidetik selama ukuran jendela.Contoh Debounce
Pada contoh berikut,
onResize()
hanya akan dipanggil sekali pada akhir tindakan mengubah ukuran jendela. Ini mencapai hasil yang sama dengan yang disajikan oleh @Mark dalam jawabannya.sumber
Ada solusi elegan menggunakan Underscore.js Jadi, jika Anda menggunakannya dalam proyek Anda, Anda dapat melakukan hal berikut -
Ini sudah cukup :) Tapi, Jika Anda tertarik untuk membaca lebih lanjut tentang itu, Anda dapat memeriksa posting blog saya -
http://rifatnabi.com/post/detect-end-of-jquery-resize-event-using-underscore -debounce(deadlink)sumber
lodash
juga menyediakan iniSalah satu solusinya adalah memperluas jQuery dengan suatu fungsi, misalnya:
resized
Penggunaan sampel:
$(window).resized(myHandler, 300);
sumber
Anda dapat menyimpan id referensi ke setInterval atau setTimeout. Seperti ini:
Untuk melakukan ini tanpa variabel "global" Anda dapat menambahkan variabel lokal ke fungsi itu sendiri. Ex:
sumber
Anda dapat menggunakan
setTimeout()
danclearTimeout()
bersamaan denganjQuery.data
:Memperbarui
Saya menulis ekstensi untuk meningkatkan default
on
(&bind
) -event-handler jQuery . Ini melampirkan fungsi event handler untuk satu atau lebih peristiwa ke elemen yang dipilih jika acara tidak dipicu untuk interval yang diberikan. Ini berguna jika Anda ingin memecat panggilan balik hanya setelah penundaan, seperti acara pengubahan ukuran, atau yang lain. https://github.com/yckart/jquery.unevent.jsGunakan itu seperti penangan lain
on
ataubind
-event, kecuali bahwa Anda dapat melewatkan parameter tambahan sebagai yang terakhir:http://jsfiddle.net/ARTsinn/EqqHx/
sumber
Ada metode yang jauh lebih sederhana untuk menjalankan fungsi di akhir pengubahan ukuran daripada menghitung waktu delta di antara dua panggilan, lakukan saja seperti ini:
Dan yang setara untuk Angular2 :
Untuk metode sudut, gunakan
() => { }
notasi dalamsetTimeout
untuk mempertahankan cakupan, jika tidak, Anda tidak akan dapat membuat panggilan fungsi atau penggunaanthis
.sumber
Ini adalah modifikasi dari kode Dolan di atas, saya telah menambahkan fitur yang memeriksa ukuran jendela di awal ukuran dan membandingkannya dengan ukuran di akhir ukuran, jika ukurannya lebih besar atau lebih kecil dari margin ( mis. 1000) lalu dimuat ulang.
sumber
Jawaban Mark Coleman tentu jauh lebih baik daripada jawaban yang dipilih, tetapi jika Anda ingin menghindari variabel global untuk ID timeout (
doit
variabel dalam jawaban Mark), Anda dapat melakukan salah satu dari yang berikut:(1) Gunakan ekspresi fungsi yang segera dipanggil (IIFE) untuk membuat penutupan.
(2) Gunakan properti fungsi event handler.
sumber
saya menulis fungsi litte wrapper sendiri ...
Ini adalah penggunaannya:
sumber
sumber
Nah, sejauh menyangkut window manager, masing-masing event resize adalah pesannya sendiri, dengan awal dan akhir yang berbeda, jadi secara teknis, setiap kali window diubah ukurannya, itu adalah akhirnya.
Karena itu, mungkin Anda ingin mengatur kelanjutan Anda? Ini sebuah contoh.
sumber
Berikut ini skrip SANGAT sederhana untuk memicu acara 'resizestart' dan 'resizeend' pada objek jendela.
Tidak perlu berkutat dengan tanggal dan waktu.
The
d
variabel mewakili jumlah milidetik antara peristiwa mengubah ukuran sebelum memicu peristiwa mengubah ukuran akhir, Anda dapat bermain dengan ini untuk mengubah seberapa sensitif acara akhirnya adalah.Untuk mendengarkan acara ini, yang perlu Anda lakukan adalah:
resizestart:
$(window).on('resizestart', function(event){console.log('Resize Start!');});
resizeend:
$(window).on('resizeend', function(event){console.log('Resize End!');});
sumber
Ini yang saya gunakan untuk menunda tindakan berulang, bisa dipanggil di banyak tempat dalam kode Anda:
Pemakaian:
sumber
karena jawaban yang dipilih tidak benar-benar berfungsi .. dan jika Anda tidak menggunakan jquery di sini adalah fungsi throttle sederhana dengan contoh cara menggunakannya dengan mengubah ukuran jendela
sumber
ini bekerja untuk saya karena saya tidak ingin menggunakan plugin apa pun.
Di jendela kembali ukuran memanggil "setFn" yang mendapat lebar jendela dan simpan sebagai "originalWindowSize". Kemudian aktifkan "checkFn" yang setelah 500 ms (atau preferensi Anda) mendapatkan ukuran jendela saat ini, dan membandingkan yang asli dengan saat ini, jika tidak sama, maka jendela tersebut masih berukuran ulang. Jangan lupa untuk menghapus pesan konsol dalam produksi, dan (opsional) dapat membuat "setFn" dieksekusi sendiri.
sumber
Ini bekerja untuk apa yang saya coba lakukan di chrome. Ini tidak akan memecat panggilan balik hingga 200 ms setelah acara pengubahan ukuran terakhir.
sumber
MEMPERBARUI!
Alternatif yang lebih baik juga dibuat oleh saya ada di sini: https://stackoverflow.com/a/23692008/2829600 (mendukung "hapus fungsi")
POST ASLI:
Saya menulis fungsi sederhana ini untuk menangani penundaan eksekusi, berguna di dalam jQuery .scroll () dan .resize () Jadi, callback_f hanya akan berjalan sekali untuk string id tertentu.
sumber
$(window).resize(function() { delay_exec('test1', 30, function() { ... delayed stuff here ... }); });
? Kode yang cukup bersih sebaliknya. Terima kasih telah berbagi. :)ResizeStart dan ResizeEnd events untuk window
http://jsfiddle.net/04fLy8t4/
Saya mengimplementasikan fungsi yang memicu dua peristiwa pada elemen DOM pengguna:
Kode:
sumber
sumber
Saya tidak tahu apakah kode saya berfungsi untuk orang lain, tetapi benar-benar melakukan pekerjaan yang baik untuk saya. Saya mendapat ide ini dengan menganalisis kode Dolan Antenucci karena versinya tidak berfungsi untuk saya dan saya sangat berharap ini akan membantu seseorang.
sumber
Saya menulis sebuah fungsi yang melewati suatu fungsi ketika dibungkus dalam setiap peristiwa pengubahan ukuran. Ini menggunakan interval sehingga mengubah ukuran bahkan tidak terus-menerus membuat acara timeout. Hal ini memungkinkannya untuk melakukan secara independen dari peristiwa pengubahan ukuran selain dari entri log yang harus dihapus dalam produksi.
https://github.com/UniWrighte/resizeOnEnd/blob/master/resizeOnEnd.js
}
sumber