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 srcSetclass dan loadevent bind yang mengambil currentSrc(atau srcjika tidak didukung) dan meletakkannya sebagai background-imageCSS ke induk terdekat dengan bgFromSrcSetkelas.
Itu saja tidak akan cukup! Jadi itu juga menempatkan pemeriksa interval padawindow loadacara untuk menguji apakah peristiwa beban telah selesai, jika tidak, itu memicunya. (img loadPeristiwa 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 bgFromSrcSetharus tidak diatur ke imgitu sendiri! Ini hanya dapat disetel ke elemen di imgpohon induk DOM.