Berdasarkan jawaban @Weston , saya telah membuat solusi jQuery yang lebih umum, pada dasarnya Anda cukup menyalin & menempelkan JS dan CSS dan fokus pada bagian HTML;)
CSS
... untuk memastikan gambar hampir tidak terlihat saat memuat
.srcSet{
position: fixed;
z-index: 0;
z-index: -1;
z-index: -100;
}
JS / jQuery
Skrip ini akan memeriksa semua gambar yang memiliki srcSet
class dan load
event bind yang mengambil currentSrc
(atau src
jika tidak didukung) dan meletakkannya sebagai background-image
CSS ke induk terdekat dengan bgFromSrcSet
kelas.
Itu saja tidak akan cukup! Jadi itu juga menempatkan pemeriksa interval padawindow
load
acara untuk menguji apakah peristiwa beban telah selesai, jika tidak, itu memicunya. (img
load
Peristiwa sangat sering terpicu hanya pada pemuatan pertama kali , pada pemuatan berikutnya, sumber gambar dapat diambil dari cache, sehingga peristiwa pemuatan img TIDAK diaktifkan! )
jQuery(function($){
var $window = $(window);
var $srcSets = $('.srcSet');
$srcSets.each(function(){
var $currImg = $(this);
$currImg
.load(function(){
var img = $currImg.get(0);
var src = img.currentSrc ? img.currentSrc : img.src;
$currImg.closest('.bgFromSrcSet').css('background-image', "url('"+src+"')");
$srcSets = $srcSets.not($currImg);
$currImg.remove();
})
;
});
$window.load(function(){
var loadChecker = setInterval(function(){
if( $srcSets.length > 0 )
$srcSets.load();
else
clearInterval(loadChecker);
}, 150);
});
});
HTML
... bisa terlihat seperti ini:
<div class="bgFromSrcSet">
<img class="srcSet"
alt=""
src="http://example.com/something.jpeg"
srcset="http://example.com/something.jpeg 5760w, http://example.com/something-300x200.jpeg 300w, http://example.com/something-768x512.jpeg 768w, http://example.com/something-1024x683.jpeg 1024w, http://example.com/something-1000x667.jpeg 1000w"
sizes="(max-width: 2000px) 100vw, 2000px"
>
Something else...
</div>
Catatan: class bgFromSrcSet
harus tidak diatur ke img
itu sendiri! Ini hanya dapat disetel ke elemen di img
pohon induk DOM.