На основі відповіді @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-image
CSS до найближчого батька з 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.