vue的图片懒加载

**安装:**vueuse 插件

npm i @vueuse/core
搜索: useIntersectionObserver 方法

复制代码
import { ref } from 'vue'
import { useIntersectionObserver } from '@vueuse/core'

export default {
  setup() {
    const target = ref(null)
    const targetIsVisible = ref(false)

    const { stop } = useIntersectionObserver(
      target,
      ([{ isIntersecting }], observerElement) => {
        targetIsVisible.value = isIntersecting
      },
    )

    return {
      target,
      targetIsVisible,
    }
  },
}

使用:

main.js:

1、引入方法

复制代码
// 用来图片懒加载
import { useIntersectionObserver } from "@vueuse/core";

2、提前配置好 自定义指令

复制代码
// 全局指令
app.directive("img-lazy", {
  mounted(el, binding) {
    console.log(el, binding.value);
    const { stop } = useIntersectionObserver(
      el,
      ([{ isIntersecting }], observerElement) => {
        console.log(isIntersecting);
        if (isIntersecting) {
          el.src = binding.value;
          stop()     //避免性能浪费,视口可见后不再监听
        }
      }
    );
  },
});

html部分:

复制代码
 <li v-for="item in list" :key="item.id">
        <RouterLink to="/">
          <img alt="" v-img-lazy="item.picture" />
          <p class="name">{{ item.name }}</p>
          <p class="price">&yen;{{ item.price }}</p>
        </RouterLink>
      </li>

useIntersectionObserver 方法可以获取元素是否在视口区域内,在的话就是true,不在就是flase

相关推荐
Mike_jia20 小时前
🎓 OpenMAIC 终极指南:清华开源的多智能体 AI 互动课堂平台
前端
踩着两条虫20 小时前
告别低代码“黑盒”!VTJ.PRO 2.0:用AI与自由重塑Vue3开发
前端·低代码·ai编程
OpenTiny社区20 小时前
WebAgent :基于 MCP 协议打造的智能应用“超级路由器”
前端·agent·mcp
吴声子夜歌21 小时前
TypeScript——模块解析
javascript·ubuntu·typescript
dweizhao21 小时前
别再用 Figma 画线框图了,Google 这款免费工具直接出 UI 稿
前端
han_21 小时前
JavaScript设计模式(五):装饰者模式实现与应用
前端·javascript·设计模式
ProgramHelpOa21 小时前
Amazon SDE Intern OA 2026 最新复盘|70分钟两题 Medium-Hard
java·前端·javascript
smchaopiao21 小时前
如何用CSS和JS搞定全屏图片展示
前端·javascript·css
酉鬼女又兒21 小时前
零基础快速入门前端CSS Transform 与动画核心知识点及蓝桥杯 Web 应用开发考点解析(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·css·职场和发展·蓝桥杯·html
山川行1 天前
Python快速闯关8:内置函数
java·开发语言·前端·笔记·python·学习·visual studio