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

相关推荐
前端九哥5 分钟前
💻【急招!27届前端实习生】广州4399实习太幸福了!江景+三餐+健身房全都有😭
前端·面试·招聘
咖啡の猫11 分钟前
Vue全局事件总线
前端·javascript·vue.js
Lovereo33 分钟前
我的目标检测性能优化之路:预算不够、GPU 没有、但性能我得要
前端
T___T35 分钟前
JavaScript 变量声明详解:var、let、const 的核心差异
javascript·面试
蒙娜丽宁39 分钟前
Rust 与 WebAssembly:构建高效前端应用的全流程复盘
前端·rust·wasm
这儿有一堆花39 分钟前
使用 Actix-web 开发高性能 Web 服务
前端·数据库
豆苗学前端40 分钟前
10分钟带你入门websocket,并实现一个在线多人聊天室
前端·javascript·后端
白水清风42 分钟前
Vue3之渲染器
前端·vue.js·面试
刘永胜是我1 小时前
解决Volta环境下npm全局包卸载失败:一次深入排查之旅
前端·node.js
白水清风1 小时前
Vue3之组件化
前端·vue.js·面试