Saya mencari cara yang cepat dan mudah untuk memuat foto dengan JavaScript. Saya menggunakan jQuery jika itu penting.
Saya melihat ini di sini ( http: //nettuts.com ... ):
function complexLoad(config, fileNames) {
for (var x = 0; x < fileNames.length; x++) {
$("<img>").attr({
id: fileNames[x],
src: config.imgDir + fileNames[x] + config.imgFormat,
title: "The " + fileNames[x] + " nebula"
}).appendTo("#" + config.imgContainer).css({ display: "none" });
}
};
Tapi, itu terlihat agak berlebihan untuk apa yang saya inginkan!
Saya tahu ada plugin jQuery di luar sana yang melakukan ini tetapi mereka semua tampak agak besar (dalam ukuran); Saya hanya perlu cara preloading gambar yang cepat, mudah dan singkat!
$.each(arguments,function(){(new Image).src=this});
Jawaban:
Cepat dan mudah:
Atau, jika Anda menginginkan plugin jQuery:
sumber
$('<img />')
hanya menciptakan elemen gambar dalam memori (lihat tautan ). Sepertinya'$('<img src="' + this + '" />')
akan benar-benar membuat elemen dalam DIV tersembunyi, karena lebih "rumit". Namun, saya rasa ini tidak diperlukan untuk sebagian besar browser.$.preload(['img1.jpg', 'img2.jpg'])
?$(window).load(function(){/*preload here*/});
karena dengan cara itu semua gambar dalam dokumen dimuat terlebih dahulu, kemungkinan mereka diperlukan terlebih dahulu.load
acara sebelum mengatur untuksrc
berjaga-jaga jika gambar selesai memuat sebelum acara memuat diatur?$('<img/>').load(function() { /* it's loaded! */ }).attr('src', this);
Inilah versi tweak dari respons pertama yang sebenarnya memuat gambar ke DOM dan menyembunyikannya secara default.
sumber
hide()
lebih singkat daricss('display', 'none')
.Gunakan objek Gambar JavaScript .
Fungsi ini memungkinkan Anda untuk memicu panggilan balik setelah memuat semua gambar. Namun, perhatikan bahwa itu tidak akan pernah memicu panggilan balik jika setidaknya satu sumber daya tidak dimuat. Ini dapat dengan mudah diperbaiki dengan menerapkan
onerror
panggilan balik dan menambahloaded
nilai atau menangani kesalahan.sumber
onload
acara bahkan jika gambar di-cache? (Karenaimg.onload
dideklarasikan terlebih dahulu). Inilah yang ditunjukkan oleh tes saya.JP, Setelah memeriksa solusi Anda, saya masih mengalami masalah di Firefox di mana itu tidak akan memuat gambar sebelum pindah bersama dengan memuat halaman. Saya menemukan ini dengan meletakkan beberapa
sleep(5)
di skrip sisi server saya. Saya menerapkan solusi berikut berdasarkan Anda yang tampaknya menyelesaikan ini.Pada dasarnya saya menambahkan panggilan balik ke plugin prapuat jQuery Anda, sehingga dipanggil setelah semua gambar dimuat dengan benar.
Tidak menarik, dalam konteks saya, saya menggunakan ini sebagai berikut:
Semoga ini membantu seseorang yang datang ke halaman ini dari Google (seperti yang saya lakukan) mencari solusi untuk preloading gambar pada panggilan Ajax.
sumber
checklist = this.length
Dan pada fungsi onload:checklist--
Lalu:if (checklist == 0) callback();
.attr({ src: this }).load(function() {...})
seharusnya.load(function() {...}).attr({ src: this })
kalau tidak Anda akan memiliki masalah caching.Kode jQuery satu baris ini membuat (dan memuat) elemen DOM img tanpa memperlihatkannya:
sumber
Penggunaannya cukup sederhana:
http://jsfiddle.net/yckart/ACbTK/
sumber
Saya memiliki plugin kecil yang menangani ini.
Ini disebut waitForImages dan dapat menangani
img
elemen atau elemen apa pun dengan referensi ke gambar di CSS, misalnyadiv { background: url(img.png) }
.Jika Anda hanya ingin memuat semua gambar, termasuk yang direferensikan dalam CSS, berikut adalah cara melakukannya :)
sumber
:visible
ke pemilih khusus.load
acara tersebut, ketika diterapkan pada gambar: "tidak bekerja secara konsisten dan tidak dapat diandalkan lintas-browser". Bagaimana plugin berhasil menyiasatinya?Anda dapat memuat gambar di html Anda di suatu tempat menggunakan css
display:none;
aturan , kemudian tunjukkan ketika Anda inginkan dengan js atau jqueryjangan gunakan fungsi js atau jquery untuk preload hanyalah aturan css Vs banyak baris js yang akan dieksekusi
contoh: Html
Css:
jQuery:
Mem-preloading gambar dengan jquery / javascript tidak bagus karena gambar membutuhkan beberapa milidetik untuk memuat di halaman + Anda memiliki milidetik untuk skrip diurai dan dieksekusi, terutama jika itu adalah gambar besar, jadi menyembunyikannya dalam hml lebih baik juga untuk kinerja, menyebabkan gambar benar-benar dimuat tanpa terlihat sama sekali, sampai Anda menunjukkan itu!
sumber
Plugin jquery imageLoader ini hanya 1,39kb
pemakaian:
ada juga opsi lain seperti apakah Anda ingin memuat gambar secara sinkron atau asikron dan acara lengkap untuk masing-masing gambar.
sumber
allcomplete
callback dijalankan setelah DOM siap. Ada kemungkinan yang cukup bagus bahwa gambar selesai dimuat setelah DOM siap, tetapi tidak ada alasan untuk menganggap. Saya tidak tahu mengapa Anda berpikir panggilan balik itu ajaib dan dieksekusi setelah DOM siap ... bisakah Anda menjelaskan dari mana Anda mendapatkannya? Hanya karena gambar dimuat bukan berarti DOM sudah siapNB to use this as an image preloader simply put your $(document).ready(function(){}); into your 'allcomplete' event : > simples!
... ia langsung merekomendasikan apa yang ditunjukkan oleh jawaban ini.Cara cepat dan bebas plugin untuk memuat gambar di jQuery dan mendapatkan fungsi panggilan balik adalah membuat banyak
img
tag sekaligus dan menghitung respons, mis.Perhatikan bahwa jika Anda ingin mendukung IE7, Anda harus menggunakan versi yang sedikit kurang cantik ini (yang juga berfungsi di browser lain):
sumber
Terima kasih untuk ini! Saya ingin menambahkan sedikit riff pada jawaban JP - Saya tidak tahu apakah ini akan membantu siapa pun, tetapi dengan cara ini Anda tidak harus membuat array gambar, dan Anda dapat memuat semua gambar besar Anda jika Anda beri nama jempol Anda dengan benar. Ini berguna karena saya memiliki seseorang yang menulis semua halaman dalam html, dan itu memastikan satu langkah lebih sedikit untuk mereka lakukan - menghilangkan kebutuhan untuk membuat array gambar, dan langkah lain di mana hal-hal bisa kacau.
Pada dasarnya, untuk setiap gambar pada halaman itu meraih src dari setiap gambar, jika itu cocok dengan kriteria tertentu (adalah ibu jari, atau gambar halaman rumah) itu mengubah nama (string dasar diganti dalam gambar src), kemudian memuat gambar .
Dalam kasus saya, halaman itu penuh dengan gambar jempol semua bernama sesuatu seperti image_th.jpg, dan semua gambar besar yang sesuai bernama image_lg.jpg. Jempol ke besar hanya menggantikan _th.jpg dengan _lg.jpg dan kemudian memuat semua gambar besar.
Semoga ini bisa membantu seseorang.
sumber
sumber
Saya menggunakan kode berikut:
sumber
Saya akan menggunakan file Manifest untuk memberi tahu browser (modern) untuk memuat semua gambar yang relevan dan menyimpannya. Gunakan Grunt dan grunt-manifes untuk melakukan ini secara otomatis dan jangan pernah khawatir lagi tentang preload script, cache invalidators, CDN dll.
https://github.com/gunta/grunt-manifest
sumber
Ini bekerja untuk saya bahkan di IE9:
sumber
Saya ingin melakukan ini dengan hamparan khusus Google Maps API. Kode sampel mereka hanya menggunakan JS untuk memasukkan elemen IMG dan kotak placeholder gambar ditampilkan hingga gambar dimuat. Saya menemukan jawaban di sini yang berfungsi untuk saya: https://stackoverflow.com/a/10863680/2095698 .
Ini preload gambar seperti yang disarankan sebelumnya, dan kemudian menggunakan penangan untuk menambahkan objek img setelah URL img dimuat. Dokumentasi jQuery memperingatkan bahwa gambar yang di-cache tidak bekerja dengan baik dengan kode acara / penangan ini, tapi itu berfungsi untuk saya di FireFox dan Chrome, dan saya tidak perlu khawatir tentang IE.
sumber
.attr('src',value)
tidak.attr('src',this)
hanya untuk menunjukkannya :)
sumber
this
di dalam callback yang diteruskan$.each
ditugaskan ke nilai yang sedang diulang.$("div").each(function(i, el){ console.log(el == this);});
menghasilkan semuatrue
s; Iterasi over array tampaknya berperilaku berbeda.5 baris dalam naskah kopi
sumber
Bagi mereka yang tahu sedikit actioncript, Anda dapat memeriksa flash player, dengan sedikit usaha, dan membuat preloader flash, yang juga dapat Anda ekspor ke html5 / Javascript / Jquery. Untuk menggunakan jika flash player tidak terdeteksi, lihat contoh bagaimana melakukan ini dengan peran youtube kembali ke html5 player :) Dan buat sendiri. Saya tidak memiliki detail, karena saya belum memulai, jika saya tidak lupa, saya akan mempostingnya nanti dan akan mencoba beberapa kode Jquery standerd untuk saya.
sumber