图片懒加载...

图片懒加载..就是当加载页面的时候,只加载可视区域的图片,这样可以帮助网站节约大量的流量资源,提高页面加载速度。

思路:1、首先给img标签自定义一个data-src属性,用来存放图片的地址

          2、当图片滚动到可视区域内,把自定义的data-src属性的值赋值给img标签的src属性


html结构如下:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>图片懒加载..</title>
	<link rel="stylesheet" href="css/style.css">
	<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
   <div class="container">
   	<div class="box">
   	 <ul class="Jul clearfix">
   	 	<li class="left"><a href=""><img data-src="images/1.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/2.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/3.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/4.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li class="left"><a href=""><img data-src="images/5.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/6.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/7.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/8.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li class="left"><a href=""><img data-src="images/9.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/10.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/11.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/12.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li class="left"><a href=""><img data-src="images/13.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/14.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/15.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/16.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li class="left"><a href=""><img data-src="images/17.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/18.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/19.jpg" src="" alt="图片加载中..."></a></li>
   	 	<li><a href=""><img data-src="images/20.jpg" src="" alt="图片加载中..."></a></li>
   	 </ul>
   	</div>
   </div>

   <script src="js/main.js"></script>
</body>
</html>

css样式如下

html,body,div,ul,li,a,img{
	margin:0;
	padding:0;
}
a{
	text-decoration:none;
}
li{
	list-style:none;
}
.clearfix:before,
.clearfix:after{
	content:'';
	display:table;
	clear:both;
}
.container{
	width:980px;
	margin-left:auto;
	margin-right:auto;
	background:#ccc;
}
.box{
	padding:0 20px;
	margin-top:600px;
}
.Jul li{
    float:left;
    margin:20px 0 0 20px;
    background:#fff;
}
.Jul li.left{
	margin-left:0;
}
.Jul li a{
	display:block;
	width:220px;
	height:220px;
	text-align:center;
    line-height:220px;
    color:#000;
}
.Jul li a img{
	width:220px;
	height:220px;
}

js代码如下

$(function(){
    var Img=$('.box img');
     lazyRender(Img);
    var timer;
    $(window).on('scroll',function() {
        if(timer) {
        	clearTimeout(timer)
        }
        timer = setTimeout(function(){//延时加载
        	console.log('1')
        	lazyRender(Img);
        },30)
    })
   
    //判断当前的img是否出现在了视野中
    function checkShow($img) {
    	var scrollTop = $(window).scrollTop();
    	var windowHeight = $(window).height();
    	var offsetTop = $img.offset().top;
        //判断是否出现在视野中的两种情况:
        //一、目标图片的顶部是否小于滚动距离+浏览器窗口的高度,如果小于,证明没有加载过
        //二、目标图片顶部距离大于滚动距离,就加载..
    	if(offsetTop < (scrollTop + windowHeight) && offsetTop > scrollTop) {
    		return true;
    	}
    	return false;
    }

    function isLoaded($img) {//判断是否已经加载过..
    	return $img.attr('data-src') === $img.attr('src');
    }
    
    function loadImg($img) {//把自定义属性的值赋值给图片的src
    	$img.attr('src',$img.attr('data-src'));
    }

    function lazyRender($img) {
       $img.each(function () {
            if (checkShow($(this)) && !isLoaded($(this)) ){
                loadImg($(this));
            }
        })
    }
})

打开开发者工具的network查看图片加载情况

当没有出现在可视区域时:


出现在可视区域时:


实现的效果



下面是鸡汤时刻:

来,大声喊出来:梦想是要有的,万一实现了呢!!!!

猜你喜欢

转载自blog.csdn.net/caimaomaocai/article/details/80035671