这篇文章主要介绍了javascript实现图片懒加载的方法及思路,有时我们需要用懒加载,也就是延迟加载图片的方式,来提高网站的亲和力,需要的朋友可以参考下
一、定义
图片延迟加载也称为懒加载,延迟加载图片或符合某些条件时才加载某些图片,通常用于图片比较多的网页。可以减少请求图片数量或者延迟请求时间,优化网页性能。
二、原理
将页面中的img标签src指向一张小图片或者src为空,然后定义data-src(这个属性可以自定义命名,我才用data-src)属性指向真实的图片。当载入页面时,先把可视区域内的img标签的data-src属性值负给src,然后监听滚动事件,把用户即将看到的图片加载。这样便实现了懒加载。
三、呈现形式
1、延时加载,使用setTimeout或setInterval进行加载延迟,如果用户在加载前就离开,自然就不会进行加载。
2、条件加载,符合某些条件或者触发了某些条件才开始异步加载。
3、可视区域加载,仅仅加载用户可以看到的区域,这个主要监控滚动条来实现,一般距离用户看到的底边很近的时候开始加载,这样能保证用户下拉时图片正好接上,不会有太长时间的停顿。
四、基本步骤
1、网页中的图片都设为同一张图片
2、给图片增加data-src = "img/timg.jpg"的属性,保存图片的真实地址
3、当触发某些条件时,自动改变该区域的图片的src属性为真实的地址
第一种:JavaScript实现的方式
HTML:
<div class="container"> <img src="" data-src="img/timg.jpg" alt=""> <img src="" data-src="img/timg.jpg" alt=""> <img src="" data-src="img/timg.jpg" alt=""> <img src="" data-src="img/timg.jpg" alt=""> <img src="" data-src="img/timg.jpg" alt=""> <img src="" data-src="img/timg.jpg" alt=""> <img src="" data-src="img/timg.jpg" alt=""> <img src="" data-src="img/timg.jpg" alt=""> <img src="" data-src="img/timg.jpg" alt=""> <img src="" data-src="img/timg.jpg" alt=""> <img src="" data-src="img/timg.jpg" alt=""> </div>
JavaScript:
// 这是懒加载的方式 // 首先获得页面当中所有的图片 var img = document.getElementsByTagName("img"); //存储图片加载到的位置,避免每次都从第一张图片开始遍历 var n = 0; //页面载入完毕加载可是区域内的图片 lazyload(); // 注册滚动条滚动事件 window.onscroll = lazyload; //监听页面滚动事件 function lazyload() { //可见区域高度 var seeHeight = document.documentElement.clientHeight; /* 滚动条距离顶部高度 * document.body.scrollTop:chrome * document.documentElement.scrollTop:FF * */ var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; for(var i = n; i < img.length; i++) { /* * 当前图片相对于页面顶部的距离 <= 可视区域 + 滚动条距离距离顶部的距离 * */ if(img[i].offsetTop < seeHeight + scrollTop - 800) { // 将img[i]的src设置成img[i]的data-src if(img[i].getAttribute("src") == "") { img[i].src = img[i].getAttribute("data-src"); } n = i + 1; } } }
第二种:jQuery实现的方式
jQuery:
// 變量n儲存圖片加載的位置,防止每次都從第一張開始加載 var n = 0, img = $('img'); // 页面刷新时首先调用一次加载函数 lazyload(); // 注册滚动监听函数 $(window).scroll(lazyload); function lazyload() { for(var i = n; i < img.length; i++) { /* * offset() 方法返回或设置匹配元素相对于文档的偏移(位置)。 * offset().top 方法返回元素距离页面顶部的距离 * scrollTop() 方法返回或设置匹配元素的滚动条的垂直位置。 * */ if(img.eq(i).offset().top < parseInt($(window).height()) + parseInt($(window).scrollTop()) - 600) { // 如果每个img的src为空的话,给每个img的src赋值为data-src的值 if(img.eq(i).attr("src") == "") { var src = img.eq(i).attr("data-src"); img.eq(i).attr("src", src); n = i + 1; } } } }