图片懒加载

图片懒加载

意义

在网页中,常常会需要用到图片,加载图片需要流量和时间;一般情况下浏览器解析html会从上往下依次加载<img src="xxx">的图片资源;如果图片数量过多则需耗费过多资源(比如电商、网商等),且用户不一定会滚动网页去查看所有的图片,那未被看到的图片请求回来就会造成浪费。图片懒加载的意义是通过前端优化图片请求时机,“按需加载”,减少请求次数或延缓请求时间,减少服务器压力,给用户更好的体验

实现原理

给图片统一设置src路径(如src="xxx/loading.gif"),然后利用另一个属性设置真实的src路径(如data-src="xxx/load1.jpg"),在解析html的时候,先加载可视区域的图片,未可见区域的图片暂不请求,当页面滚动时,通过计算图片是否属于当前可视区域,是则设置src的值为data-src的值,实现图片显示

js 实现图片懒加载

实现代码

<!DOCTYPE html>
<html>
<head>
    <title>js实现图片懒加载</title>
    <style type="text/css">
        img{
            display: block;
        }
    </style>
</head>
<body>
	<img src="img/loading.gif" data-src="img/1.jpg">
	<img src="img/loading.gif" data-src="img/2.jpg">
	<img src="img/loading.gif" data-src="img/3.jpg">
	<img src="img/loading.gif" data-src="img/4.gif">
	<img src="img/loading.gif" data-src="img/5.jpg">
	<img src="img/loading.gif" data-src="img/6.jpg">
	<img src="img/loading.gif" data-src="img/7.jpg">
	<img src="img/loading.gif" data-src="img/8.jpg">
</body>
<script type="text/javascript">
	window.onload = function(){
		let img = document.getElementsByTagName('img')
		let imgArr = Array.from(img)
		let clientHeight = document.documentElement.clientHeight
		document.onscroll = scroll

		function scroll(){
			if(imgArr.length > 0){
				let scrollTop = Number(window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop)
				imgArr.forEach((item,index) => {
					// 遍历数组,判断当前图片元素是否属于可视区域
					let imgTop = item.offsetTop
					if(imgTop < (clientHeight + scrollTop)){
						item.src = item.getAttribute('data-src')
						// 已设置真实的src后需将该元素删除
						imgArr.splice(index,1)
					}
				})
			}
		}
		// 先执行一次加载,显示可视区域的图片
		scroll()
	}
</script>
</html>

视频链接:js懒加载视频演示

Vue实现图片懒加载

实现步骤

  1. 安装vue-lazyload插件: npm install vue-lazyload --save-dev

  2. main.js文件中引入插件:

    import VueLazyLoad from 'vue-lazyload'
    Vue.use(VueLazyLoad,{
    	error:require('./statics/img/error.jpg'),
    	loading:require('./statics/img/loading.jpg')
    })
    
  3. vue文件中将需要懒加载的图片绑定:src改为v-lazy="xxx"

    <img v-lazy="xxx">
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值