vue3 图片懒加载

一,下载插件

1.npm i  @vueuse/core

2. 导入api

import { useIntersectionObserver } from "@vueuse/core"

3.使用api 

onMounted(() => {
    const { stop } = useIntersectionObserver(refImg.value, ([{ isIntersecting }]) => {
        if (isIntersecting) {

            refImg.value.src = 'https://img.bosszhipin.com/beijin/mcs/chatphoto/20190411/5a88d3b2b5f52168a6695f534fca4670a722b321da03f08d29a2ecbd23451ef4_s.jpg?x-oss-process=image/resize,w_120,limit_0'
        }
        console.log(isIntersecting, refImg.value.src);
    })

})

封装 v-lazy:

import { useIntersectionObserver } from '@vueuse/core'
import { App } from 'vue'
import defaultImg from '@/assets/images/200.png'
export default {
  install(app: App) {
    // 全局指令
    app.directive('lazy', {
      // mounted是v3中自定义指令的生命周期,它会被自动调用
      // 它表示的涵义和组件的mounted是一致的
      // el 是dom元素, binding
      mounted(el,binding) {
        // 设置默认图
        el.src = defaultImg

        // console.log('lazy', el, binding.value)

        // 实时监听el是否可见,如果可见,给他的src设置binding.value
        const { stop } = useIntersectionObserver(el, ([{isIntersecting}]) => {
          if(isIntersecting) {
            el.src = binding.value
            // 停止
            stop()
          }
        })

        // el是img标签
        // el.onerror 0级dom事件
        // el.onclick = () =>
        // el.addEventListener('click')
        // el.onerror = () => {
        // }
        el.addEventListener('error', () => {
          // console.log('失败11111')
          // 设置默认图
          el.src = defaultImg
        })
      }
    })
  }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值