【发布时间】:2015-04-22 18:46:53
【问题描述】:
我正在寻找有关如何最好地延迟加载图片元素的建议。我可能喜欢使用一个小的 jQuery 辅助函数来确定图片是否“在屏幕上”。但是 srcset 的懒惰获取,我现在不确定该怎么做。那么,有什么想法吗?
这是我正在使用的图片元素的示例。谢谢!
<picture alt="Random Celebrities" data-src="http://www.example.com/r/c_1,h_478,w_478/2015/03/19/random-celebrities-08-560x560.jpg">
<!--[if IE 9]><video style="display: none;"><![endif]-->
<source class='picture-source-1260' srcset='http://www.example.com/r/c_1,h_239,w_239/2015/03/19/random-celebrities-08-560x560.jpg, http://www.example.com/r/c_1,h_478,w_478/2015/03/19/random-celebrities-08-560x560.jpg 2x' media='(min-width: 1260px)'>
<source class='picture-source-960' srcset='http://www.example.com/r/c_1,h_180,w_180/2015/03/19/random-celebrities-08-560x560.jpg, http://www.example.com/r/c_1,h_360,w_360/2015/03/19/random-celebrities-08-560x560.jpg 2x' media='(min-width: 960px)'>
<source class='picture-source-760' srcset='http://www.example.com/r/c_1,h_150,w_150/2015/03/19/random-celebrities-08-560x560.jpg, http://www.example.com/r/c_1,h_300,w_300/2015/03/19/random-celebrities-08-560x560.jpg 2x' media='(min-width: 760px)'>
<source class='picture-source-450' srcset='http://www.example.com/r/c_1,h_210,w_210/2015/03/19/random-celebrities-08-560x560.jpg, http://www.example.com/r/c_1,h_420,w_420/2015/03/19/random-celebrities-08-560x560.jpg 2x' media='(min-width: 450px)'>
<source class='picture-source-320' srcset='http://www.example.com/r/c_1,h_160,w_160/2015/03/19/random-celebrities-08-560x560.jpg, http://www.example.com/r/c_1,h_320,w_320/2015/03/19/random-celebrities-08-560x560.jpg 2x'>
<!--[if IE 9]></video><![endif]-->
<noscript>
<img class="picture-img-noscript" src="http://www.example.com/r/c_1,h_160,w_160/2015/03/19/random-celebrities-08-560x560.jpg" alt="Random Celebrities" />
</noscript>
<img class="picture-img" srcset="http://www.example.com/r/c_1,h_160,w_160/2015/03/19/random-celebrities-08-560x560.jpg" alt="Random Celebrities" />
</picture>
【问题讨论】:
-
当我尝试为此问题添加标签“图片”或“图片元素”时,它会转换为“图片”。但为了澄清起见,我专门研究延迟加载使用图片标签和 srcset 定义的图像。
-
浏览器延迟加载图片元素,如果你想复制浏览器使用的整个过程并使用JavaScript(大概是为了能够添加某种视觉过渡),那么你不要'不需要(并且可能不应该)使用图片元素作为占位符。
-
所以“首屏下方”或以其他方式不在视口中的图片元素(轮播中的屏幕外等)在进入视口之前不会加载?
-
我用错了术语。我的意思是延迟加载,因为根据视口/设备仅加载必要的图像(列表之外)。图片元素规范未指定浏览器应如何在视口之外加载图像,因此它们将在第一次渲染时加载。
-
知道了。然后澄清一下,对于遇到这个问题的任何其他人,我希望推迟对实际图像的 http 请求,直到图片元素位于视口中。谢谢!
标签: jquery image lazy-loading