Основываясь на ответе @Weston , я создал более общее решение jQuery, вы можете просто скопировать и вставить JS и CSS и сосредоточиться на части HTML;)
CSS
... чтобы изображения не были видны во время загрузки
.srcSet{
position: fixed;
z-index: 0;
z-index: -1;
z-index: -100;
}
JS / jQuery
Этот сценарий просматривает все изображения, которые имеют событие srcSetclass и bind, 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>
Примечание: class неbgFromSrcSet должен быть установлен на себя! Он может быть установлен только для элементов в родительском дереве DOM.imgimg