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

相关推荐
凌涘9 分钟前
依托 BEM 规范深度剖析 WeUI 微信按钮组件开发与实现
前端·微信
不好听61310 分钟前
Node.js 工程化开发流程 — 知识点总结
javascript·node.js
小KK_12 分钟前
CSS浮动布局指南:从文档流到BFC
前端·css·html
ZengLiangYi33 分钟前
sql.js WASM 深度解析
javascript·数据库·后端
Hommy8840 分钟前
【剪映小助手】音频处理接口
前端·音视频·剪映小助手·视频剪辑自动化
KaMeidebaby1 小时前
卡梅德生物技术快报|蛋白翻译后修饰:YAP/TAZ 分子调控机制与靶向干预技术
前端·人工智能·物联网·百度·新浪微博
JustHappy1 小时前
古法编程秘籍(三):为什么需要函数?因为程序员讨厌重复劳动
前端·javascript·后端
一 乐1 小时前
人口老龄化社区服务与管理平台|基于springboot+vue的人口老龄化社区服务与管理平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·人口老龄化社区服务与管理平台
weixin_397574091 小时前
AgentRAG与ReAct推理链:从检索增强到推理增强
前端·react.js·前端框架
想要狠赚笔的小燕1 小时前
vue项目的入口文件是什么 main.js还是index.html,他俩有啥区别
前端·javascript