说一下图片的懒加载和预加载
懒加载:
<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 实现加载图片,这样等用户查看的时候,图片被显示了,能够直接显示。
一个缩虐图点击,展示大图。 预先加载大图,实现预览流畅