【问题标题】:How to lazy load images vertically & horizontally?如何延迟垂直和水平加载图像?
【发布时间】:2015-10-15 06:36:39
【问题描述】:

我的网站有一个图像网格,它有水平和垂直滚动。我想先加载垂直放置的图像,然后再加载水平图像,所有这些都是懒惰的。

换句话说,当用户向下滚动垂直图像时应该延迟加载,当用户滚动水平图像时,水平图像应该延迟加载。我尝试使用lazyload,但我无法使用让它同时适用于垂直和水平图像容器。

一次只能进行水平或垂直滚动​​。我希望他们两个都能工作!

我的测试代码如下,

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="jquery.lazyload.js"></script>
<script type="text/javascript" charset="utf-8">
    $(function() {
 $("img.lazy").lazyload({
effect : "fadeIn",
container: $("#hcontainer")
});
});
  </script>

<style type="text/css">
#hcontainer {
    height: 800px;
    overflow: scroll;
}
#inner_container {
      width: 4750px;
    }
</style>

<div id="vcontainer">
<div id="hcontainer">
    <div id="inner_container">
          <img class="lazy" data-original="1.jpg" width="765" height="574" alt="BMW M1 Hood">
          <img class="lazy" data-original="2.jpg" width="765" height="574" alt="BMW M1 Side">
          <img class="lazy" data-original="3.jpg" width="765" height="574" alt="Viper 1">
          <img class="lazy" data-original="4.jpg" width="765" height="574" alt="Viper Corner">
          <img class="lazy" data-original="5.jpg" width="765" height="574" alt="BMW M3 GT">
          <img class="lazy" data-original="6.jpg" width="765" height="574" alt="Corvette Pitstop">
        </div>
</div>
<br/>
        <img class="lazy img-responsive" data-original="2.jpg" width="765" height="574" alt="BMW M1 Side"><br/>
        <img class="lazy img-responsive" data-original="3.jpg" width="765" height="574" alt="Viper 1"><br/>
        <img class="lazy img-responsive" data-original="4.jpg" width="765" height="574" alt="Viper Corner"><br/>
        <img class="lazy img-responsive" data-original="5.jpg" width="765" height="574" alt="BMW M3 GT"><br/>
        <img class="lazy img-responsive" data-original="6.jpg" width="765" height="574" alt="Corvette Pitstop"><br/>
</div>

它没有按我希望的那样工作。谁能帮帮我?

请看下图的输出,我还需要延迟加载垂直图像,这不会发生。

【问题讨论】:

  • 您的#vcontainer 没有定义的高度
  • #vcontainer 是普通的 div 标签。准确地说,它不是一个容器。类似于appelsiini.net/projects/lazyload/enabled_fadein.html
  • 如果不是容器就不用设置为容器
  • 是的,你是对的。修改了代码,还是一样的问题:|

标签: javascript jquery html lazy-loading


【解决方案1】:

添加这个也可以将延迟加载分配给不在#hcontainer中的图像

 $(function() {
    $(":not(#hcontainer) img.lazy").lazyload({
        effect: "fadeIn"
    });

    $("img.lazy").lazyload({
        effect: "fadeIn",
        container: $("#hcontainer")
     });
});

编辑:

Demo

【讨论】:

  • 没用。垂直图像未加载。在 chrome 浏览器中添加输出 html 页面 :(
  • @Abhishek 我离开了容器分配,我清除它并添加了一个代码笔,你的控制台上是否有任何错误?
【解决方案2】:

我建议你试试lazySizes。与其他延迟加载器的最大区别在于,lazySizes 无需配置即可自动检测可见性更改。

这允许关注点分离,因为您无需更改 JS 延迟加载器配置,以防您更改 CSS 并添加滚动容器或在大型菜单中添加图像等。

您需要做的就是添加lazysizes 脚本并使用data-src 而不是src 并添加类lazyload

【讨论】:

  • 不错的一个!我会试一试,然后回来;)
猜你喜欢
  • 2022-11-15
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多