На основі відповіді @Weston , я створив більш загальне рішення jQuery, ви можете в основному просто скопіювати та вставити JS та CSS і зосередитись на частині HTML;)
CSS
... щоб гарантувати, що зображення будуть погано видно під час завантаження
.srcSet{
position: fixed;
z-index: 0;
z-index: -1;
z-index: -100;
}
JS / jQuery
Цей скрипт пройде всі зображення, що мають подію srcSetкласу та прив'язки, loadяка відбувається currentSrc(або srcякщо не підтримується), і поміщає її як background-imageCSS до найближчого батька з bgFromSrcSetкласом.
Цього самого було б недостатньо! Таким чином, він також ставить перевірку інтервалуwindow loadподії, щоб перевірити, чи були завантажені події завершені, якщо ні, він їх ініціює. (img loadподія дуже часто спрацьовує лише при першому завантаженні , при наступних завантаженнях джерело зображення можна отримати з кешу, в результаті подія завантаження img НЕ запускається! )
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
... може виглядати так:
<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>
Примітка: клас bgFromSrcSetповинен НЕ бути встановлений на imgсебе! Його можна встановити лише для елементів у imgбатьківському дереві DOM.