使用lazysizes进行Picturefill和lazyloading

时间:2016-06-30 10:10:09

标签: image lazy-loading responsive-images picturefill

我正在尝试使用lazysizes和picturefill进行延迟加载。

如果我只使用基本图像,则惰性加载本身有效:

<img class=lazyload data-srcset="http://placehold.it/301x301">

如果我检查chrome中的网络选项卡,我可以看到图像是在红线后加载的,所以一切都很好:

enter image description here

现在我在响应式图像中添加了<picture>元素并尝试加载也是懒惰的元素:

<picture>

    <!--[if IE 9]><video style="display: none;"><![endif]-->
    <source srcset="http://placehold.it/1370x301 1x, http://placehold.it/2055x450 2x" media="(min-width: 1024px)" />
    <source srcset="http://placehold.it/1023x300 1x, http://placehold.it/1534x450 2x" media="(min-width: 768px)" />
    <source srcset="http://placehold.it/767x300 1x, http://placehold.it/1151x450 2x" media="(min-width: 384px)" />
    <!--[if IE 9]></video><![endif]-->

    <img
            class="lazyload"
            style="width: 100%; max-width: 100%;"
            alt="Sample pic"
            data-srcset="http://placehold.it/383x300 1x, http://placehold.it/575x450 2x"
    />

</picture>

不幸的是,这个图像不是延迟加载而是直接加载: enter image description here

我也试过在图片元素图片中只使用一个src,但这并没有什么区别。

根据lazysizes文档,应该可以将这项工作放在一起,所以我想我只是错过了一个小细节?

更新:Lazysizes和Picturefill都加载在<head>

1 个答案:

答案 0 :(得分:6)

您需要使用data-srcset代替srcset

<picture>

    <!--[if IE 9]><video style="display: none;"><![endif]-->
    <source data-srcset="http://placehold.it/1370x301 1x, http://placehold.it/2055x450 2x" media="(min-width: 1024px)" />
    <source data-srcset="http://placehold.it/1023x300 1x, http://placehold.it/1534x450 2x" media="(min-width: 768px)" />
    <source data-srcset="http://placehold.it/767x300 1x, http://placehold.it/1151x450 2x" media="(min-width: 384px)" />
    <!--[if IE 9]></video><![endif]-->

    <img
            class="lazyload"
            style="width: 100%; max-width: 100%;"
            alt="Sample pic"
            data-srcset="http://placehold.it/383x300 1x, http://placehold.it/575x450 2x"
    />

</picture>