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 srcSet
classe e bind load
che accetta currentSrc
(o src
se non supportato) e lo mette come background-image
CSS al genitore più vicino con la bgFromSrcSet
classe.
Già questo non sarebbe sufficiente! Quindi mette anche un controllo dell'intervallowindow
load
sull'evento per verificare se gli eventi di caricamento sono stati completati, altrimenti li attiva. (l'img
load
evento è 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.img
img