图片懒加载

有时服务器一次返回图片数据很大,一次加载完需要耗费很长时间,这时候,图片懒加载就体现优势

方法一:

通过设置img的src属性来实现懒加载,通过require模拟服务器返回数据

<template>
  <div class="content" ref="content">
    <template v-for="(item, index) in imgs" :key="index">
      <img src="./imgs/1.png" :my-data="item" alt="图片加载中" />
    </template>
  </div>
</template>

<script>
export default {
  name: "app",
  data() {
    return {
      imgs: [],
    };
  },
  created() {
    const context = require.context("./imgs", true, /\.png$/); // 根据路径正则读取文件
    for (let i = 0; i <= 24; i++) {
      let imgName = `./prefix_${i}.png`;
      const Img = context(imgName).default;
      this.imgs.push(Img);
    }
  },
  mounted() {
    //获取全部img标签
    let images = document.getElementsByTagName("img");

    window.addEventListener("scroll", (e) => {
      //当发生滚动事件时调用ergodic事件
      ergodic();
    });

    function ergodic() {
      // 遍历每一张图
      for (let i of images) {
        //判断当前图片是否在可视区内
        if (i.offsetTop <= window.innerHeight + window.scrollY) {
          //console.log(i.offsetTop, window.innerHeight, window.scrollY);
          //获取自定义data-src属性的值
          let trueSrc = i.getAttribute("my-data");
          //把值赋值给图片的src属性
          i.setAttribute("src", trueSrc);
        }
      }
    }
    //没发生滚动事件时也要先执行一次
    ergodic();
  },
};
</script>
 
 
posted @   lijun12138  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示