Sulla base della risposta di @Weston , ho creato una soluzione jQuery più generale, in pratica puoi semplicemente copiare e incollare JS e CSS e concentrarti sulla parte HTML;)
CSS
... per garantire che le immagini siano difficilmente visibili durante il caricamento
.srcSet{
position: fixed;
z-index: 0;
z-index: -1;
z-index: -100;
}
JS / jQuery
Questo script esaminerà tutte le immagini che hanno un evento di srcSetclasse e bind loadche accetta currentSrc(o srcse non supportato) e lo mette come background-imageCSS al genitore più vicino con la bgFromSrcSetclasse.
Già questo non sarebbe sufficiente! Quindi mette anche un controllo dell'intervallowindow loadsull'evento per verificare se gli eventi di caricamento sono stati completati, altrimenti li attiva. (l'img loadevento è molto spesso attivato solo al primo caricamento , ai seguenti caricamenti, l'origine dell'immagine potrebbe essere recuperata dalla cache, con il risultato che l'evento img load NON viene attivato! )
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
... potrebbe assomigliare a questo:
<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>
Nota: la classe nonbgFromSrcSet deve essere impostata su se stessa! Può essere impostato solo sugli elementi nell'albero genitore DOM.imgimg