Vue图片懒加载(非插件)

1.首先准备一个图片数组,用来遍历图片

2.遍历所有的图片,src属性值设置为空,data-set的值设置为图片的路径

( 如果img标签的src属性有值的时候浏览器会发送请求 )

3.给浏览器添加滚动事件

 methods: {
    scroll () {
      const imgs = this.$refs.imgBox
      // 全屏可视区域高度
      const boxHeight = document.documentElement.clientHeight
      // 全屏滚动高度
      const boxTop = document.documentElement.scrollTop
      // 当图片距离顶部的距离不为0且小于全屏可视区域高度加上全屏滚动高度时,将data-set里面的路径赋                
         值给src
      imgs.forEach(item => {
        if (item.offsetTop < boxHeight + boxTop && item.offsetTop) {
          if (item.attributes[1].nodeValue === '') {
            item.attributes[1].nodeValue = item.attributes[2].nodeValue
          }
        }
      })
    }
  },
mounted () {
    window.addEventListener('scroll', this.scroll)
  }

分析一下那样子写的原因:

下面的图片滚动的时候下方图片需要展示出来,也就是当图片出现在我们的可视区域时显示。

如果在不滚动的情况下我们现在整个可视区域就是浏览器的一整个页面,也就是下面这一整张图片,当我们的鼠标慢慢滚动的时候,我们的滚动条距离顶部的距离也在慢慢增加,下面的元素也慢慢往上移动,元素往上移动的距离其实就是滚动条距离顶部的高度,所以我们的可视区域就是一整个屏幕的高度加上滚动条的滚动高度。

由于图片距离顶部的高度是固定的,所以当 图片距离顶部的高度 < 可视区域的高度 + 滚动条距离顶部的高度 时就说明图片已经进入了可视区域,这个时候就把data-set里面的路径赋值给src。

最终效果展示:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值