Sur la base de la réponse de @Weston , j'ai construit une solution jQuery plus générale, vous pouvez simplement copier et coller le JS et le CSS et vous concentrer sur la partie HTML;)
CSS
... pour garantir que les images seront à peine visibles lors du chargement
.srcSet{
position: fixed;
z-index: 0;
z-index: -1;
z-index: -100;
}
JS / jQuery
Ce script parcourra toutes les images qui ont srcSet
un load
événement de classe et de liaison qui prend currentSrc
(ou src
s'il n'est pas pris en charge) et le place en tant que background-image
CSS au parent le plus proche avec la bgFromSrcSet
classe.
Cela ne suffirait pas en soi! Donc, il met également un vérificateur d'intervalle sur l'window
load
événement pour tester si les événements de chargement sont terminés, sinon, il les déclenche. (l'img
load
événement est très souvent déclenché uniquement lors du premier chargement , lors des chargements suivants, la source de l'image peut être récupérée du cache, ce qui fait que l'événement de chargement img n'est PAS déclenché! )
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
... pourrait ressembler à ceci:
<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>
Remarque: la classe nebgFromSrcSet
doit pas être définie sur img
elle - même! Il ne peut être défini que sur les éléments de l' img
arborescence parent DOM.