如何垂直和水平延迟加载图像?
How to lazy load images vertically & horizontally?
我的网站有一个图像网格,可以水平和垂直滚动。我想先加载垂直放置的图像,然后再加载水平图像,所有这些都是懒惰的。
换句话说,当用户向下滚动垂直图像时应该延迟加载,当用户水平滚动图像时水平图像应该延迟加载。我尝试使用 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>
它没有像我希望的那样工作。有人可以帮我吗?
请查看下图的输出,我还需要延迟加载垂直图像,但这并没有发生。
添加此项以将延迟加载分配给不在 #hcontainer
中的图像
$(function() {
$(":not(#hcontainer) img.lazy").lazyload({
effect: "fadeIn"
});
$("img.lazy").lazyload({
effect: "fadeIn",
container: $("#hcontainer")
});
});
编辑:
我建议您尝试 lazySizes。与其他 lazyloader 的最大区别在于,lazySizes 无需配置即可自动检测可见性变化。
这允许关注点分离,因为您无需更改 JS 延迟加载器配置,以防您更改 CSS 并添加滚动容器或在大型菜单中添加图像等。
您需要做的就是添加 lazysizes 脚本并使用 data-src
而不是 src
并添加 class lazyload
.
我的网站有一个图像网格,可以水平和垂直滚动。我想先加载垂直放置的图像,然后再加载水平图像,所有这些都是懒惰的。
换句话说,当用户向下滚动垂直图像时应该延迟加载,当用户水平滚动图像时水平图像应该延迟加载。我尝试使用 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>
它没有像我希望的那样工作。有人可以帮我吗?
请查看下图的输出,我还需要延迟加载垂直图像,但这并没有发生。
添加此项以将延迟加载分配给不在 #hcontainer
$(function() {
$(":not(#hcontainer) img.lazy").lazyload({
effect: "fadeIn"
});
$("img.lazy").lazyload({
effect: "fadeIn",
container: $("#hcontainer")
});
});
编辑:
我建议您尝试 lazySizes。与其他 lazyloader 的最大区别在于,lazySizes 无需配置即可自动检测可见性变化。
这允许关注点分离,因为您无需更改 JS 延迟加载器配置,以防您更改 CSS 并添加滚动容器或在大型菜单中添加图像等。
您需要做的就是添加 lazysizes 脚本并使用 data-src
而不是 src
并添加 class lazyload
.