当前位置: 首页 > 知识库问答 >
问题:

如何使用srcset延迟加载图像?

戚哲
2023-03-14

我正在使用slick.js构建一个旋转木马。但是,即使我将属性从src更改为data lazy,在我滚动到该图像之前,图像仍然会被加载。我怀疑这是因为我的图像中有srcset标记。我的问题是如何防止浏览器加载响应图像,或者如何正确地延迟加载响应图像。

这是我的img标签的样本

<img data-lazy="better_me.jpg" srcset="better_me.jpg 400w, better_me.jpg 200w" class="avatar photo avatar-200" alt="better_me" width="200" height="200" sizes="(min-device-resolution: 1.6) 400px, 200px">

共有3个答案

漆雕博
2023-03-14

通常,为了在HTML中实现延迟加载,我们不使用srcsrcset属性,而是使用datasrcdatasrcset,这样浏览器在推测性解析期间不会加载图像。稍后,当执行Javascript时,用户在image元素附近滚动,我们加载实际图像并更新srcsrcset属性的值。

两个非常流行的延迟加载库lazysizes和vanilla lazyload支持即时响应图像。

下面是一些使用懒散尺寸的例子。

<img
    sizes="(min-width: 1000px) 930px, 90vw"
    data-srcset="small.jpg 500w,
                 medium.jpg 640w,
                 big.jpg 1024w"
    data-src="medium.jpg"
    class="lazyload" />
<img
    src="low-quaity-placeholder.jpg"
    sizes="(min-width: 1000px) 930px, 90vw"
    data-srcset="small.jpg 500w,
                 medium.jpg 640w,
                 big.jpg 1024w"
    data-src="medium.jpg"
    class="lazyload" />
<picture>
      <source
          data-srcset="500.jpg"
          media="(max-width: 500px)" />
      <source
          data-srcset="1024.jpg"
          media="(max-width: 1024px)" />
      <source
          data-srcset="1200.jpg" />
      <img src="fallback-image.jpg"
          data-src="1024.jpg"
          class="lazyload"
          alt="image with artdirection" />
</picture>

您可以从本指南了解有关响应图像的更多信息-https://imagekit.io/responsive-images

严朝明
2023-03-14

我建议负责懒惰。该实现是SEO友好的,不会弄乱您的超文本标记语言代码。这里是一个片段:

<div class="responsively-lazy" style="padding-bottom:68.44%;">
<img
    alt=""
    src="images/2500.jpg"
    srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="
    data-srcset="images/400.jpg 400w, images/600.jpg 600w, images/800.jpg 800w, images/1000.jpg 1000w, images/1500.jpg 1500w, images/2000.jpg 2000w"
/>

如您所见,src属性中的值未被修改。

阅读更多http://ivopetkov.com/b/lazy-load-responsive-images/

牧宁
2023-03-14

懒散的工作很好。但是,您需要将标记更改为类似这样的内容。

<img data-src="better_me.jpg" data-srcset="better_me2.jpg 400w, better_me.jpg 200w" class="avatar photo avatar-200 lazyload" data-sizes="auto" alt="better_me" width="200" height="200" />

注意srcset更改为data-srcsetdata-l存在更改为data-src。此外,您必须添加类lazyload。

您的size属性没有太大意义。也许你想用x描述符来代替?或者简单地使用size="200px"?我不知道。我只是把它切换到data-size="auto",所以它会自动为您计算。但在这种情况下,图像维度必须在加载图像之前是可计算的。)

lazySizes确实会在图像进入视图之前加载图像。这是对用户体验的一大改进。如果用户将某些内容滚动到视图中,则不想等待。一个懒散的加载器在图像已经在视图中之后开始下载图像,会破坏用户体验。

lazySizes的一个优点是,这个惰性加载程序检查浏览器当前是否大量下载,并根据这一事实决定是否只下载视图中的图像,还是同时预加载近视图图像。

但是如果您不想这样做,您可以通过设置lazySizes的expandexpFactor选项来控制。

 类似资料:
  • 问题内容: 我的页面上有几个画廊,包括手风琴和滑杆。问题是页面需要永久加载。有没有一种方法可以将图像包装在一些代码中或对它应用类以强制仅在加载所有其他内容之后才加载它? 问题答案: 你当然可以。将您的img src属性替换为“#”,然后添加一个自定义属性,如下所示: 然后,在页面加载时添加一条JavaScript行,该行的内容如下所示:

  • 我想做一个reactjs页面懒惰加载图像。因此,我调用lazyLoadImages()内部的组件didMount()。我发现位于浏览器选项卡的浏览器加载指示器仍然一路旋转,直到加载所有图像。这让我认为我所做的并没有提供真正的懒惰加载图像体验。 有趣的是,如果我在setTimeout中用一个不太短的timeout参数包装lazyLoadImages(),例如100ms(不是0或甚至50ms),那么页

  • Flask 通常配合装饰器使用,装饰器使用非常简单,而且使您可以将 URL 和处理它的函数 放在一起。然而这种方法也有一种不足: 这就意味着您使用装饰器的代码必须在前面导入, 否则 Flask 将无法找到您的函数。 这对于需要很快导入的应用程序来说是一个问题,这种情况可能出现在类似谷歌的 App Engine 这样的系统上。所以如果您突然发现您的引用超出了这种方法可以处理 的能力,您可以降级到中央

  • 我正在使用Mika Tuupola的jQuery延迟加载。 是否可以在每次延迟加载图像后调用函数。 我打算做的是跟踪图像的浏览次数。因此,如果图像是延迟加载的,这意味着用户已经看到了图像,我将通过在后台执行HTTP GET,将数据库中的计数器增加1。

  • 描述 (Description) 延迟加载可应用于图像,背景图像和淡入效果,如下所述 - 对于图像 要在图像上使用延迟加载,请按照给定的步骤进行操作 - 使用data-src属性而不是src属性来指定图像源。 将类lazy添加到图像。 <div class = "page-content"> ... <img data-src = "image_path.jpg" class = "l

  • 问题内容: 我正在开发一个eshop。在基于类别的产品页面上,我放置了一些基于javascript的过滤器。但是,如果类别具有很多产品,则会出现问题。该链接具有与我相似的功能… 这个页面多么缓慢,却超过2mb !!! 对我来说,每个产品都需要一半的K字节,但是图像是个问题。.因此,我正在寻找如何延迟加载图像的方法。由于与该网站不同,我的页面具有分页功能,因此我认为加载仅对页面可见的图像是一种解决方