Saya ingin mengatur gambar latar belakang pada tag tubuh, kemudian jalankan beberapa kode - seperti ini:
$('body').css('background-image','http://picture.de/image.png').load(function() {
alert('Background image done loading');
// This doesn't work
});
Bagaimana saya bisa memastikan gambar latar belakang dimuat penuh?
javascript
jquery
Peter
sumber
sumber
Image()
objek yang memilikionload
acara.url()
Jawaban:
coba ini:
ini akan membuat gambar baru di memori dan menggunakan memuat acara untuk mendeteksi ketika src dimuat.
sumber
javascript:void($('<img/>').attr('src', 'http://farm6.static.flickr.com/5049/5220175127_5693faf952.jpg').load(function() { $('html').css('background-image', 'url(http://farm6.static.flickr.com/5049/5220175127_5693faf952.jpg)'); }))
dan periksa permintaan HTTP di Firebug. Jika saya telah membuka halaman flicker dengan gambar ini dibuka di tab lain itu tidak melakukan permintaan HTTP apa pun hanya menampilkan gambar ini secara instan. dan ketika saya menghapus cache dan menjalankannya ada satu permintaan..remove()
pada$('<img/>')
objek untuk menghindari kebocoran memori. Anda akan melihat konsumsi memori yang stabil pada tes pertama dan peningkatan memori pada tes kedua. Setelah beberapa jam berjalan di Chrome 28, pengujian pertama membutuhkan 80MB dan yang kedua 270MB.Saya memiliki plugin jQuery yang disebut
waitForImages
yang dapat mendeteksi kapan gambar latar belakang diunduh.sumber
each
callback.delay()
tidak berfungsi seperti itu.Sesuatu seperti ini:
sumber
bg.replace( ... , my_src )
. Tapi pertanyaan saya adalah: setelah $ ('<img>') dimuat, apa yang sebenarnya terjadi dengan itu<img>
... Maksud saya itu tidak benar-benar nyata - itu hanya penampung dummy, kan?<img>
tidak pernah dimasukkan ke dalam DOM; itu hanya digunakan untuk "menipu" browser agar memuat file gambar ke dalam cache.Tidak ada callback JS untuk aset CSS.
sumber
solusi JS murni yang akan menambahkan preloader, mengatur gambar latar belakang dan kemudian mengaturnya untuk pengumpulan sampah bersama dengan pendengar acara itu :
Versi pendek:
Sedikit lebih lama dengan transisi opacity yang bagus:
sumber
Ini adalah plugin kecil yang saya buat untuk memungkinkan Anda melakukan hal ini, itu juga berfungsi pada banyak gambar latar belakang dan beberapa elemen:
Baca artikel:
http://catmull.uk/code-lab/background-image-loaded/
atau langsung ke kode plugin:
http://catmull.uk/downloads/bg-loaded/bg-loaded.js
Jadi cukup sertakan plugin dan panggil saja pada elemen:
Jelas unduh plugin dan simpan di hosting Anda sendiri.
Secara default ia menambahkan kelas "bg-loaded" tambahan untuk setiap elemen yang cocok setelah latar belakang dimuat tetapi Anda dapat dengan mudah mengubahnya dengan melewatkannya fungsi yang berbeda seperti ini:
Berikut ini adalah codepen yang menunjukkan itu berfungsi.
http://codepen.io/catmull/pen/Lfcpb
sumber
Saya telah menemukan solusi yang bekerja lebih baik untuk saya, dan yang memiliki keuntungan dapat digunakan dengan beberapa gambar (case tidak diilustrasikan dalam contoh ini).
Dari jawaban @ adeneo pada pertanyaan ini :
sumber
Saya melakukan hack javascript murni untuk membuat ini mungkin.
Atau
css:
sumber
https://github.com/alexanderdickson/waitForImages
sumber