懒加载 页面运行到浏览器,图片是不立即进行加载的。
懒加载的优势
保证图片一定能够加载成功,防止破图,增强用户体验。
有利于性能优化。
懒加载的实现
在css中设置占位背景图,并将图片设置为display:none;
将真实的图片的地址放到结构的自定义属性上,不直接给到图片的src;
保证这个图片的地址是正确的,在赋值给这个图片的src;
首屏页面 保证图片资源一定能够加载成功才去加载当前这张图片,即延迟一定时间去展示图片。
步骤:
先弄一个占位背景图;
默认图片是隐藏的;
创建一个临时的图片;
将真实图片的地址赋值给当前这个临时图片的src;
判断当前这个图片资源是否加载成功;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <style> * { padding : 0 ; margin : 0 ; } .box { width : 200px ; height : 200px ; background : url (./img/loading.gif ) no-repeat center #efefef ; margin : 50px auto; } .box img { width : 100% ; height : 100% ; border : none; display : none; } </style>
1 2 3 <div class ="box" > <img src ="" trueSrc ="./img/0.jpg" class ="img" > </div >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var box = document .getElementsByClassName ('box' )[0 ];var img = document .getElementsByClassName ('img' )[0 ];window .setTimeout (imgLazy, 1000 );function imgLazy ( ) { var oImg = document .createElement ("img" ); oImg.src = img.getAttribute ('trueSrc' ); oImg.onload = function ( ) { img.src = this .src ; img.style .display = "block" ; } }
其他屏页面 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <style> * { padding : 0 ; margin : 0 ; } html { height : 2000px ; } .box { width : 200px ; height : 200px ; margin : 1000px auto; background : url (./img/loading.gif ) no-repeat center #ededed ; } .box img { width : 100% ; height : 100% ; border : none; display : none; } </style>
1 2 3 <div class ="box" > <img src ="" trueSrc ="./img/0.jpg" class ="img" > </div >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 var box = document .getElementsByClassName ('box' )[0 ];var img = document .getElementsByClassName ('img' )[0 ];var winH = document .documentElement .clientHeight ;window .onscroll = function ( ) { var scrollT = document .documentElement .scrollTop ; if (winH + scrollT >= img.parentNode .offsetTop + img.parentNode .clientHeight ) { imgLazy (); } } function imgLazy ( ) { var oImg = document .createElement ('img' ); oImg.src = img.getAttribute ('trueSrc' ); oImg.onload = function ( ) { img.src = this .src ; img.style .display = "block" ; } }