vue 图片懒加载

<template>
  <view class="">
  	// 给img 设置自定义属性data-src
  	// data-src为真正要展示的图片
  	// src为占位图片
    <img
      src="https://s1.ax1x.com/2022/12/01/z01OWF.md.jpg"
      class="avatar"
      data-src="../static/btn_enter.png"
    />
    <img
      src="https://s1.ax1x.com/2022/12/01/z01OWF.md.jpg"
      class="avatar"
      data-src="../static/azIcon.png"
    />
    <img
      src="https://s1.ax1x.com/2022/12/01/z01OWF.md.jpg"
      class="avatar"
      data-src="../static/btn_enter@2x.png"
    />
    <img
      src="https://s1.ax1x.com/2022/12/01/z01OWF.md.jpg"
      class="avatar"
      data-src="../static/btn_fabu.png"
    />
    <img
      src="https://s1.ax1x.com/2022/12/01/z01OWF.md.jpg"
      class="avatar"
      data-src="../static/btn_tianjiashipin.png"
    />
    <img
      src="https://s1.ax1x.com/2022/12/01/z01OWF.md.jpg"
      class="avatar"
      data-src="../static/component.png"
    />
    <img
      src="https://s1.ax1x.com/2022/12/01/z01OWF.md.jpg"
      class="avatar"
      data-src="../static/componentHL.png"
    />
    <img
      src="https://s1.ax1x.com/2022/12/01/z01OWF.md.jpg"
      class="avatar"
      data-src="../static/approval/cancel-status.png"
    />
    <img
      src="https://s1.ax1x.com/2022/12/01/z01OWF.md.jpg"
      class="avatar"
      data-src="../static/templateHL.png"
    />
    <img
      src="https://s1.ax1x.com/2022/12/01/z01OWF.md.jpg"
      class="avatar"
      data-src="../static/uni.png"
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      imgShow: true,
    };
  },
  created() {},
  mounted() {
 	// 第一次加载,加载已在当前视图的图片
    this.imgonload();
    // 监听窗口滚动
    this.scroll();
  },
  methods: {
    // 监听滚动
    scroll() {
    // 设置一个节流优化
      window.addEventListener("scroll", () => {
        if (!this.imgShow) {
          return;
        }
        setTimeout(() => {
          this.imgonload();
          this.imgShow= true;
        }, 500);
        this.imgShow= false;
      });
    },
    imgonload() {
      //把伪数组转化为真数组
      // DOMobj.getBoundingClientRect().top   //获取该图片元素到屏幕顶部的距离
	  // window.innerHeight    //屏幕的高度
      let imgs = [...document.querySelectorAll(".avatar")];
      for (let i = 0; i < imgs.length; i++) {
        if (imgs[i].getBoundingClientRect().top < window.innerHeight) {
          let srcData = imgs[i].dataset.src.replace(
            "../",
            location.origin + "/"
          );
          // 判断当前图片是否加载完成 如果加载完成那么不在重复加载
          if (srcData != imgs[i].src) {
            imgs[i].src = imgs[i].dataset.src;
          }
        }
      }
    },
  },
};
</script>

<style>
.avatar {
  display: block;
  width: 90%;
  height: 500rpx;
  margin: 0 auto;
}
</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值