Apakah fungsi yang saya tulis di bawah ini cukup untuk memuat gambar di sebagian besar, jika tidak semua, peramban yang umum digunakan saat ini?
function preloadImage(url)
{
var img=new Image();
img.src=url;
}
Saya memiliki array URL gambar yang saya putar dan memanggil preloadImage
fungsi untuk setiap URL.
javascript
Francisc
sumber
sumber
img
objek, misalnya dalam array dalam lingkup induk.(new Image()).src = url;
new Image().src = url;
Jawaban:
Iya. Ini harus bekerja pada semua browser utama.
sumber
Coba ini saya pikir ini lebih baik.
Sumber: http://perishablepress.com/3-ways-preload-images-css-javascript-ajax/
sumber
onload
penangan untuk salah satu gambaronload
keadaan atau Anda hanya membuat gambar di memori.for (var i = 0.....
var
Dalam kasus saya, berguna untuk menambahkan callback ke fungsi Anda untuk
onload
acara:Dan kemudian membungkusnya untuk kasus array URL ke gambar yang akan dimuat dengan callback pada semua dilakukan: https://jsfiddle.net/4r0Luoy7/
sumber
Alternatif CSS2: http://www.thecssninja.com/css/even-better-image-preloading-with-css2
Alternatif CSS3: https://perishablepress.com/preload-images-css3/ (Bendungan H / T Linh)
CATATAN: Gambar dalam wadah dengan
display:none
mungkin tidak dimuat sebelumnya. Mungkin visibilitas: tersembunyi akan bekerja lebih baik tetapi saya belum menguji ini. Terima kasih Marco Del Valle karena menunjukkan inisumber
display: none
tidak akan dimuat sebelumnya.display: none
, (2) tidak menggunakanwidth/height: 0
, (3) menempatkanno-repeat
dan posisi sedemikian rupa sehingga gambar akan berada di luar (-<width>px -<height>px
akan membawa Anda ke sana, jadi jika gambar Anda semua 100px dalam tinggi atau kurang, Anda dapat menggunakan0 -100px
, dengan kata lainurl(...) no-repeat 0 -100px
.Saya sarankan Anda menggunakan try / catch untuk mencegah beberapa masalah yang mungkin terjadi:
OOP:
Standar:
Juga, sementara saya suka DOM, browser bodoh lama mungkin memiliki masalah dengan Anda menggunakan DOM, jadi hindari sama sekali IMHO bertentangan dengan kontribusi freedev. Gambar () memiliki dukungan yang lebih baik di peramban sampah lama.
sumber
Pendekatan ini sedikit lebih rumit. Di sini Anda menyimpan semua gambar yang dimuat sebelumnya dalam wadah, mungkin div. Dan setelah Anda bisa menunjukkan gambar atau memindahkannya di dalam DOM ke posisi yang benar.
Coba di sini , saya juga menambahkan beberapa komentar
sumber
sumber
Ya ini akan berfungsi, namun browser akan membatasi (antara 4-8) panggilan yang sebenarnya dan dengan demikian tidak cache / pramuat semua gambar yang diinginkan.
Cara yang lebih baik untuk melakukan ini adalah memanggil onload sebelum menggunakan gambar seperti:
sumber
Inilah pendekatan saya:
sumber
Solusi untuk browser yang sesuai dengan ECMAScript 2017
Catatan: ini juga akan berfungsi jika Anda menggunakan transpiler seperti Babel.
Anda juga bisa menunggu semua gambar dimuat.
Atau gunakan
Promise.all
untuk memuatnya secara paralel.Lebih lanjut tentang Janji .
Lebih lanjut tentang fungsi "Async" .
Lebih lanjut tentang penugasan penghancuran .
Lebih lanjut tentang ECMAScript 2015 .
Lebih lanjut tentang ECMAScript 2017 .
sumber
Saya dapat mengonfirmasi bahwa pendekatan dalam pertanyaan ini cukup untuk memicu gambar untuk diunduh dan di-cache (kecuali Anda melarang browser melakukannya melalui header respons Anda) di, setidaknya:
Untuk menguji ini, saya membuat webapp kecil dengan beberapa titik akhir yang masing-masing tidur selama 10 detik sebelum menyajikan gambar anak kucing. Lalu saya menambahkan dua halaman web, yang satu berisi
<script>
tag di mana masing-masing anak kucing dimuat menggunakanpreloadImage
fungsi dari pertanyaan, dan yang lainnya mencakup semua anak kucing di halaman menggunakan<img>
tag.Di semua browser di atas, saya menemukan bahwa jika saya mengunjungi halaman preloader terlebih dahulu, menunggu sebentar, dan kemudian pergi ke halaman dengan
<img>
tag, anak-anak kucing saya merender langsung. Ini menunjukkan bahwa preloader berhasil memuat anak kucing ke dalam cache di semua browser yang diuji.Anda dapat melihat atau mencoba aplikasi yang saya gunakan untuk menguji ini di https://github.com/ExplodingCabbage/preloadImage-test .
Perhatikan secara khusus bahwa teknik ini bekerja di browser di atas bahkan jika jumlah gambar yang dilewati melebihi jumlah permintaan paralel yang bersedia dilakukan oleh browser pada suatu waktu, bertentangan dengan apa yang disarankan jawaban Robin . Tingkat di mana preload gambar Anda tentu saja akan dibatasi oleh berapa banyak permintaan paralel yang bersedia dikirim oleh browser, tetapi pada akhirnya akan meminta setiap URL gambar yang Anda panggil
preloadImage()
.sumber
Anda dapat memindahkan kode ini ke index.html untuk memuat ulang gambar dari url apa pun
sumber
Browser akan bekerja paling baik menggunakan tag tautan di kepala.
sumber