使用jQuery实现图片的懒加载

       敲了一天的jQuery,感觉自己要疯了,头疼的不行,于是,去你的吧,找些有意思的事情做吧,在网上翻啊翻啊,看到一篇关于图片懒加载的介绍,好吧,相对于学习jQuery实战,这个要有趣的多,于是实现了下,以下是过程。

       首先为啥要用懒加载,不懒我勤快点不行吗?你当然可以,可是在网页上,常常要用到图片,而图片需要消耗较大的流量,正常情况下,浏览器会解析整个HTML代码,然后从上到下依次加载<img src="xxx">的图片标签,如果页面很长,隐藏在页面下方的图片已经被浏览器加载,如果用户不向下浏览,没有看到已加载的图片,图片就相当于白浪费了流量。

        所以淘宝,京东等流量十分巨大的电商,需要使用大量的图片,因此,这些图片都是按需加载,就是用户滚动条滚到哪里,哪里就加载,没有滚到的地方不需要加载,这就是懒加载。

         懒加载的原理就是在输出HTML的时候,不要直接输出<img src="xxx">,而是输入如下标签:

<img src="/static/loading.gif" data-src="http://真正的图片地址/xxx.jpg">
         在没有加载的时候显示的一个gif的加载动画,当页面滚动到图片的时候就利用jQuery把img的src属性替换为data-src的内容,浏览器就会实现实时加载。

         代码如下(仿照百度图片的页面):

        首先要在HTML中载入jQuery和underscore

<script type ="text/javascript" src="js/jquery-3.3.1.js"/>
			</script>
<script type ="text/javascript" src="js/underscore.js"/>
			</script>
      并且添加图片,按照如下格式

  

<img src="/static/loading.gif" data-src="http://真正的图片地址/xxx.jpg">
      js代码:

$(function(){
	//获取window的应用
	var $window=$(window);
	//获取包含data-src属性的img,并以jQuery对象存入数组
	var lazyImgs=_.map($('img[data-src]').get(),function(i){
		return $(i);
	});
	var onScroll=function(){
		var wtop=$window.scrollTop();
		if (lazyImgs.length>0){
			//获取页面高度
			var wheight=$window.height();
			var loadeIndex=[];
			//循环数组的每个img元素
			_.each(lazyImgs,function($i,index){
				
				if ($i.offset().top - wtop<wheight){
					$i.attr('src',$i.attr('data-src'));
					//添加待删除的数组
					loadeIndex.unshift(index);
					
				}
			});
			//删除已处理的数组
			_.each(loadeIndex,function(index){
				lazyImgs.splice(index,1);
			});
		}
	};
	//绑定
	$window.scroll(onScroll);
	onScroll();
});
    我们用IE看下效果:

    先是没有使用js的HTML加载效果:


使用了js的HTML加载效果:





评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值