Bazując na odpowiedzi @Weston , stworzyłem bardziej ogólne rozwiązanie jQuery, możesz po prostu skopiować i wkleić JS i CSS i skupić się na części HTML;)
CSS
... aby upewnić się, że podczas ładowania obrazy będą prawie niewidoczne
.srcSet{
position: fixed;
z-index: 0;
z-index: -1;
z-index: -100;
}
JS / jQuery
Ten skrypt przejdzie przez wszystkie obrazy, które mają zdarzenie srcSetclass i bind load, które przyjmuje currentSrc(lub srcjeśli nie jest obsługiwane) i umieści je jako background-imageCSS najbliższemu rodzicowi z bgFromSrcSetklasą.
Samo to nie wystarczy! Dlatego umieszcza również sprawdzanie interwałów nawindow loadzdarzeniu, aby sprawdzić, czy zdarzenia obciążenia zostały zakończone, jeśli nie, wyzwala je. (img loadzdarzenie jest bardzo często wyzwalane tylko przy pierwszym załadowaniu , przy kolejnych ładowaniach źródło obrazu może zostać pobrane z pamięci podręcznej, co powoduje , że zdarzenie ładowania obrazu NIE jest uruchamiane! )
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
... może wyglądać tak:
<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>
Uwaga: klasa bgFromSrcSetmusi nie być ustawiony na imgsobie! Można go ustawić tylko dla elementów w imgdrzewie nadrzędnym DOM.