下面是详细讲解"jquery实现异步加载图片(懒加载图片一种方式)"的完整攻略:
1. 什么是懒加载?
懒加载,顾名思义就是“懒”,当我们打开网页时,并不会一下子加载所有的图片资源,而是将一部分图片资源的图片地址保存在data-
属性中,当滚动鼠标滑轮浏览页面时,再根据用户的浏览行为,来决定何时加载图片。
懒加载的好处在于,可以避免因为图片资源的过多,导致网页加载过慢的情况,加速页面的加载速度。
2. 如何使用jquery实现懒加载?
以下是一段使用jquery实现懒加载的代码,可以根据实际需求进行修改和优化:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jquery懒加载图片</title>
<style>
/*占位符*/
.image-placeholder{
width: 100%;
height: 50px; /*设置占位高度*/
background-color: #f5f5f5;
margin-bottom: 5px;
}
</style>
</head>
<body>
<h1>jquery实现懒加载图片</h1>
<!--图片占位符-->
<div class="image-placeholder"></div>
<div class="image-placeholder"></div>
<div class="image-placeholder"></div>
<div class="image-placeholder"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
$(function () {
//获取窗口对象
var $window = $(window);
//获取要懒加载的图片
var $images = $("img[data-src]");
//如果没有要懒加载的图片,直接返回
if ($images.length === 0) return;
//定义加载图片函数
function lazyLoadHandler() {
//获取可视区域的高度
var scrollTop = $window.scrollTop();
var windowHeight = $window.height();
//遍历要懒加载的图片
$images.each(function () {
var $img = $(this);
//获取图片距离文档顶部的高度
var imgTop = $img.offset().top;
//如果该图片在可视区域内
if (imgTop < scrollTop + windowHeight) {
//将data-src属性的值赋值给src属性
$img.attr("src", $img.data("src"));
//移除data-src属性
$img.removeAttr("data-src");
}
});
}
//触发图片加载
$window.on("scroll", lazyLoadHandler);
$window.on("load", lazyLoadHandler);
$window.on("resize", lazyLoadHandler);
});
</script>
</body>
</html>
代码说明:
- 先定义一个图片的占位符,让页面能够先展示图片的数量
- 然后我们在需要懒加载的图片标签上添加一个
data-src
属性,该属性的值表示图片的地址 - 在js中,我们获取窗口对象和要懒加载的图片,以及编写一个加载图片的函数,当用户滚动鼠标滑轮时,判断哪些图片需要加载,并加载图片。
3. 懒加载示例1
下面是一段图片的代码,使用了懒加载技术:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>图片懒加载实例1</title>
<style>
/*占位符*/
.image-placeholder{
width: 100%;
height: 50px; /*设置占位高度*/
background-color: #f5f5f5;
margin-bottom: 5px;
}
</style>
</head>
<body>
<h1>图片懒加载实例1</h1>
<!--图片占位符-->
<div class="image-placeholder"></div><div class="image-placeholder"></div><div class="image-placeholder"></div><div class="image-placeholder"></div>
<!--使用懒加载技术加载图片-->
<img src="images/download.png" alt="" width="300" height="400" data-src="images/download.png">
<img src="images/download.png" alt="" width="300" height="400" data-src="images/download.png">
<img src="images/download.png" alt="" width="300" height="400" data-src="images/download.png">
<img src="images/download.png" alt="" width="300" height="400" data-src="images/download.png">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
$(function () {
//获取窗口对象
var $window = $(window);
//获取要懒加载的图片
var $images = $("img[data-src]");
//如果没有要懒加载的图片,直接返回
if ($images.length === 0) return;
//定义加载图片函数
function lazyLoadHandler() {
//获取可视区域的高度
var scrollTop = $window.scrollTop();
var windowHeight = $window.height();
//遍历要懒加载的图片
$images.each(function () {
var $img = $(this);
//获取图片距离文档顶部的高度
var imgTop = $img.offset().top;
//如果该图片在可视区域内
if (imgTop < scrollTop + windowHeight) {
//将data-src属性的值赋值给src属性
$img.attr("src", $img.data("src"));
//移除data-src属性
$img.removeAttr("data-src");
}
});
}
//触发图片加载
$window.on("scroll", lazyLoadHandler);
$window.on("load", lazyLoadHandler);
$window.on("resize", lazyLoadHandler);
});
</script>
</body>
</html>
这里使用了一个大小为300x400的png图片,这张图片用于占位,在第二次滚动鼠标之后,才加载实际的图片。可以打开开发者工具的network查看效果。
4. 懒加载示例2
以下是一个更完整的懒加载示例,我们将在页面上使用多张图片,在用户滚动过程中加载尚未看到的那些图片:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>图片懒加载实例2</title>
<style>
img{
margin-bottom: 20px;
border: 1px solid #ccc;
}
.image-placeholder{
width: 100%;
height: 100px;
background-color: #f5f5f5;
margin-bottom: 20px;
}
</style>
</head>
<body>
<h1>图片懒加载实例2</h1>
<!--图片占位符-->
<div class="image-placeholder"></div><div class="image-placeholder"></div><div class="image-placeholder"></div><div class="image-placeholder"></div>
<!--使用懒加载技术加载图片-->
<img src="https://cdn.pixabay.com/photo/2021/11/01/09/29/bicycle-6992616_960_720.jpg" alt="" width="400" height="267" data-src="https://cdn.pixabay.com/photo/2021/11/01/09/29/bicycle-6992616_960_720.jpg">
<img src="https://cdn.pixabay.com/photo/2021/11/01/09/29/bicycle-6992616_960_720.jpg" alt="" width="400" height="267" data-src="https://cdn.pixabay.com/photo/2021/11/01/09/29/bicycle-6992616_960_720.jpg">
<img src="https://cdn.pixabay.com/photo/2021/11/01/09/29/bicycle-6992616_960_720.jpg" alt="" width="400" height="267" data-src="https://cdn.pixabay.com/photo/2021/11/01/09/29/bicycle-6992616_960_720.jpg">
<img src="https://cdn.pixabay.com/photo/2021/11/01/09/29/bicycle-6992616_960_720.jpg" alt="" width="400" height="267" data-src="https://cdn.pixabay.com/photo/2021/11/01/09/29/bicycle-6992616_960_720.jpg">
<img src="https://cdn.pixabay.com/photo/2021/11/01/09/35/bridge-6992768_960_720.jpg" alt="" width="400" height="267" data-src="https://cdn.pixabay.com/photo/2021/11/01/09/35/bridge-6992768_960_720.jpg">
<img src="https://cdn.pixabay.com/photo/2021/11/01/09/35/bridge-6992768_960_720.jpg" alt="" width="400" height="267" data-src="https://cdn.pixabay.com/photo/2021/11/01/09/35/bridge-6992768_960_720.jpg">
<img src="https://cdn.pixabay.com/photo/2021/11/01/09/35/bridge-6992768_960_720.jpg" alt="" width="400" height="267" data-src="https://cdn.pixabay.com/photo/2021/11/01/09/35/bridge-6992768_960_720.jpg">
<img src="https://cdn.pixabay.com/photo/2021/11/01/09/35/bridge-6992768_960_720.jpg" alt="" width="400" height="267" data-src="https://cdn.pixabay.com/photo/2021/11/01/09/35/bridge-6992768_960_720.jpg">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
$(function () {
//获取窗口对象
var $window = $(window);
//获取要懒加载的图片
var $images = $("img[data-src]");
//如果没有要懒加载的图片,直接返回
if ($images.length === 0) return;
//定义加载图片函数
function lazyLoadHandler() {
//获取可视区域的高度
var scrollTop = $window.scrollTop();
var windowHeight = $window.height();
//遍历要懒加载的图片
$images.each(function () {
var $img = $(this);
//获取图片距离文档顶部的高度
var imgTop = $img.offset().top;
//如果该图片在可视区域内
if (imgTop < scrollTop + windowHeight) {
//将data-src属性的值赋值给src属性
$img.attr("src", $img.data("src"));
//移除data-src属性
$img.removeAttr("data-src");
}
});
}
//触发图片加载
$window.on("scroll", lazyLoadHandler);
$window.on("load", lazyLoadHandler);
$window.on("resize", lazyLoadHandler);
});
</script>
</body>
</html>
这个示例使用了来自pixabay平台的两张不同的图片。可以打开开发者工具,network中可以查看加载的图片。
总结:我们可以通过jquery编写代码,实现图片的懒加载,让用户在体验到美好的感官效果的同时,也得到了更佳的页面加载速度。加强了用户对我们网站的体验和信任。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery实现异步加载图片(懒加载图片一种方式) - Python技术站