说一下图片的懒加载和预加载
懒加载:
<body> <div class="container"> <img src="img/loading.png" data-src="img/photo-1.jpeg"> <img src="img/loading.png" data-src="img/photo-2.jpeg"> <img src="img/loading.png" data-src="img/photo-3.jpeg"> <img src="img/loading.png" data-src="img/photo-4.jpeg"> <img src="img/loading.png" data-src="img/photo-5.jpeg"> <img src="img/loading.png" data-src="img/photo-6.jpeg"> <img src="img/loading.png" data-src="img/photo-7.jpeg"> <img src="img/loading.png" data-src="img/photo-8.jpeg"> </div> </body> <script> start(); $(window).on('scroll', function(){ start(); }) function start(){ //.not('[data-isLoaded]')选中已加载的图片不需要重新加载 $('.container img').not('[data-isLoaded]').each(function(){ var $node = $(this) if( isShow($node) ){ loadImg($node); } }) } //判断一个元素是不是出现在窗口(视野) function isShow($node){ return $node.offset().top <= $(window).height() + $(window).scrollTop(); } //加载图片 function loadImg($img){ $img.attr('src', $img.attr('data-src')); //把data-src的值 赋值给src $img.attr('data-isLoaded', 1); //已加载的图片做标记 } </script>
var arr = [ '../picture/1.jpg', '../picture/2.jpg', '../picture/3.jpg', ]; var imgs =[] preLoadImg(arr); //图片预加载方法 function preLoadImg(pars){ for(let i=0;i<arr.length;i++){ imgs[i] = new Image(); imgs[i].src = arr[i]; } }
先给图片 src 不赋值,等视图区域滚动到它的时候,给它的 src 赋值为正确的 url 以达到当下被加载。
一个相册页面,滑到对应相片区的时候才去加载这些照片
图片刚开始是不被显示的,通过获取 img 元素的 src, js new img 赋值 src 实现加载图片,这样等用户查看的时候,图片被显示了,能够直接显示。
一个缩虐图点击,展示大图。 预先加载大图,实现预览流畅