vue 图片懒加载和懒加载原理

在真实图片得到之前,展示懒加载设置的图片

1、安装
	cnpm i vue-lazyload -S
	
2、main.js
	import VueLazyload from 'vue-lazyload'

	Vue.use(VueLazyload, {
	  preLoad: 1.3,
	  error: 'dist/error.png',
	  loading: '图片路径/gif路径/引入图片对象',
	  attempt: 1
	})
	
3、使用
	只需要将:src变成v-lazy即可
	<img v-lazy='url'/ >	

懒加载原理实现:
	<img src="临时加载地址" alt="1" data-src="图片真实地址">
	当在浏览器可视区域外,则加载本地的小图片,进入可视区域,则加载属性上保存的真实图片地址

	方式一:通过浏览器可视区域高度+已经滑动的距离>图片距离文档顶部的距离,则进行懒加载
		
	方式二:getBoundingClientRect
		Top属性代表当前DOM节点距离浏览器窗口顶部的高度,只需判断top值是否小于当前浏览器窗口的高度(window.innerHeight)
		若小于说明已经进入用户视野,然后替换为真正的图片即可

代码示例:

<img v-lazy="item2.image" alt="">

懒加载原理参考:

// 获取图片列表,即img标签列表
var imgs = document.querySelectorAll('img');

// 获取到浏览器顶部的距离
function getTop(e){
	return e.offsetTop;
}

// 懒加载实现
function lazyload(imgs){
	// 可视区域高度
	var h = window.innerHeight;
	//滚动区域高度
	var s = document.documentElement.scrollTop || document.body.scrollTop;
	for(var i=0;i<imgs.length;i++){
		//图片距离顶部的距离大于可视区域和滚动区域之和时懒加载
		if ((h+s)>getTop(imgs[i])) {
			// 真实情况是页面开始有2秒空白,所以使用setTimeout定时2s
			(function(i){
				setTimeout(function(){
					// 不加立即执行函数i会等于9
					// 隐形加载图片或其他资源,
					//创建一个临时图片,这个图片在内存中不会到页面上去。实现隐形加载
					var temp = new Image();
					temp.src = imgs[i].getAttribute('data-src');//只会请求一次
					// onload判断图片加载完毕,真是图片加载完毕,再赋值给dom节点
					temp.onload = function(){
						// 获取自定义属性data-src,用真图片替换假图片
						imgs[i].src = imgs[i].getAttribute('data-src')
					}
				},2000)
			})(i)
		}
	}
}
lazyload(imgs);

// 滚屏函数
window.onscroll =function(){
	lazyload(imgs);
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值