Di jQuery saat Anda melakukan ini:
$(function() {
alert("DOM is loaded, but images not necessarily all loaded");
});
Itu menunggu DOM untuk memuat dan mengeksekusi kode Anda. Jika semua gambar tidak dimuat maka masih menjalankan kode. Ini jelas yang kita inginkan jika kita menginisialisasi hal-hal DOM seperti menunjukkan atau menyembunyikan elemen atau melampirkan acara.
Katakan saja saya ingin animasi dan saya tidak ingin itu berjalan sampai semua gambar dimuat. Apakah ada cara resmi di jQuery untuk melakukan ini?
Cara terbaik yang saya miliki adalah menggunakan <body onload="finished()">
, tetapi saya tidak benar-benar ingin melakukan itu kecuali saya harus melakukannya.
Catatan: Ada bug di jQuery 1.3.1 di Internet Explorer yang sebenarnya menunggu semua gambar dimuat sebelum menjalankan kode di dalamnya $function() { }
. Jadi, jika Anda menggunakan platform itu, Anda akan mendapatkan perilaku yang saya cari alih-alih perilaku yang benar yang dijelaskan di atas.
$("img").load()
bekerja?Jawaban:
Dengan jQuery, Anda menggunakan
$(document).ready()
untuk mengeksekusi sesuatu ketika DOM dimuat dan$(window).on("load", handler)
untuk mengeksekusi sesuatu ketika semua hal lainnya dimuat juga, seperti gambar.Perbedaannya dapat dilihat pada file HTML lengkap berikut, asalkan Anda memiliki
jollyroger
file JPEG (atau yang sesuai lainnya):Dengan itu, kotak peringatan muncul sebelum gambar dimuat, karena DOM siap pada saat itu. Jika kemudian Anda mengubah:
ke:
maka kotak peringatan tidak muncul sampai setelah gambar dimuat.
Karenanya, untuk menunggu hingga seluruh halaman siap, Anda dapat menggunakan sesuatu seperti:
sumber
Saya menulis sebuah plugin yang dapat memecat panggilan balik ketika gambar telah dimuat dalam elemen, atau memecat sekali per gambar dimuat.
Ini mirip dengan
$(window).load(function() { .. })
, kecuali itu memungkinkan Anda menentukan pemilih untuk memeriksa. Jika Anda hanya ingin tahu kapan semua gambar di#content
(misalnya) telah dimuat, ini adalah plugin untuk Anda.Ini juga mendukung pemuatan gambar dirujuk dalam CSS, seperti
background-image
,list-style-image
, dllplugin waitForImages jQuery
Contoh Penggunaan
Contoh di jsFiddle .
Dokumentasi lebih lanjut tersedia di halaman GitHub.
sumber
('img selector').each(function(index) { var offset = $(this).offset(); ...});
bagaimanapun, offset.top masih nol. Mengapa?$(window).load()
hanya akan berfungsi saat pertama kali laman dimuat. Jika Anda melakukan hal-hal dinamis (contoh: tombol klik, tunggu beberapa gambar baru dimuat), ini tidak akan berfungsi. Untuk mencapai itu, Anda dapat menggunakan plugin saya:Demo
Unduh
sumber
Yevgeniy Afanasyev
jawaban , imagesLoaded melakukan pekerjaan yang jauh lebih baik di sini & mencakup kasus penggunaan yang Anda sebutkan bersama banyak kasus sudut lainnya (lihat masalah github yang diselesaikan) .Bagi mereka yang ingin diberitahu tentang penyelesaian pengunduhan satu gambar yang diminta setelah
$(window).load
kebakaran, Anda dapat menggunakan acara elemen gambarload
.misalnya:
sumber
Sejauh ini tidak ada jawaban yang memberikan solusi paling sederhana.
sumber
Saya akan merekomendasikan menggunakan
imagesLoaded.js
perpustakaan javascript.Mengapa tidak menggunakan jQuery
$(window).load()
?Seperti yang dijelaskan pada /programming/26927575/why-use-imagesloaded-javascript-library-versus-jquerys-window-load/26929951
Alasan bagus lainnya untuk menggunakan imagesloaded
Sumber daya
sumber
Dengan jQuery saya datang dengan ini ...
Demo: http://jsfiddle.net/molokoloco/NWjDb/
sumber
Gunakan imagesLoaded PACKAGED v3.1.8 (6.8 Kb saat diperkecil). Ini relatif lama (sejak 2010) tetapi proyek masih aktif.
Anda dapat menemukannya di github: https://github.com/desandro/imagesloaded
Situs resmi mereka: http://imagesloaded.desandro.com/
Mengapa lebih baik daripada menggunakan:
Karena Anda mungkin ingin memuat gambar secara dinamis, seperti ini: jsfiddle
sumber
Dengan cara ini Anda dapat melakukan suatu tindakan ketika semua gambar di dalam tubuh atau wadah lain (yang tergantung pilihan Anda) dimuat. MURNI JQUERY, tidak perlu pluggin.
sumber
Solusi saya mirip dengan molokoloco . Ditulis sebagai fungsi jQuery:
contoh:
sumber