原生js实现滚动加载图片(懒加载)实现原理

					**原生js实现滚动加载图片(懒加载)实现原理**

一、什么是图片滚动加载?
通俗的讲就是:当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径(这样就只需请求一次),只有当图片出现在浏览器的可视区域内时,才设置图片正真的路径,让图片显示出来。这就是图片懒加载。

二、为什要使用这个技术?
比如一个页面中有很多图片,如淘宝、京东首页等等,如果一上来就发送这么多请求,页面加载就会很漫长,如果js文件都放在了文档的底部,恰巧页面的头部又依赖这个js文件,那就不好办了。更为要命的是:一上来就发送百八十个请求,服务器可能就吃不消了(又不是只有一两个人在访问这个页面)。
因此优点就很明显了:不仅可以减轻服务器的压力,而且可以让加载好的页面更快地呈现在用户面前(用户体验好)。

三、怎么实现?
废话不多说,直接上代码;

html部分:

js部分:

			 (1)获取节点和节点的“data-src”属性,继而判断此节点的子节点有没有创建img,没有则动态创建img标签将其“data-src”的值赋给img的src,有则不做任何处理
		/* 获取节点 */    
		var oUl = document.getElementsByTagName('ul')[0];//获取
		var aLi = oUl.getElementsByTagName('li');
		
		/* 创建img标签函数 */    
		function createImg(obj){
		    var src = '';
		    if(obj.dataset.src){
		        src = obj.dataset.src;
		    }else{
		        src = obj.getAttribute('data-src');
		    }
		    if(obj.children.length <= 1){
		        var img = document.createElement('img');
		        img.src = src;
		        obj.appendChild(img);
		    }
		}
		
		
//		(2)通过“offsetTop”来连续获取节点到文档顶部的距离并更新,直到节点再没有父级为止
		/* 计算节点到文档顶部的距离 */    
		function getTop(obj){
		    var h = 0;
		    while(obj){
		        h += obj.offsetTop;//当前对象到其上级层顶部的距离.
		        obj = obj.offsetParent;//方法返回最近的祖先定位元素。
		    }
		    return h;
		}
	
//	(3)滚动实时计算所到区域计算“节点到顶部距离”与“滚动条滚动距离”的大小,当“滚动条滚动距离”大于“节点到顶部距离”时开始创建一个img((1)的函数)
		/* 滚动实时计算所到区域并进行相关计算 */
		window.onscroll = function(){
		    var t = document.documentElement.clientHeight + (document.body.scrollTop || document.documentElement.scrollTop);
		    for(var i=0;i

你可能感兴趣的:(原生js实现滚动加载图片(懒加载)实现原理)