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 srcSet
class i bind load
, które przyjmuje currentSrc
(lub src
jeśli nie jest obsługiwane) i umieści je jako background-image
CSS najbliższemu rodzicowi z bgFromSrcSet
klasą.
Samo to nie wystarczy! Dlatego umieszcza również sprawdzanie interwałów nawindow
load
zdarzeniu, aby sprawdzić, czy zdarzenia obciążenia zostały zakończone, jeśli nie, wyzwala je. (img
load
zdarzenie 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 bgFromSrcSet
musi nie być ustawiony na img
sobie! Można go ustawić tylko dla elementów w img
drzewie nadrzędnym DOM.