图片懒加载指令

1.安装@vueuse/core 包,它封装了常见的一些交互逻辑

vueuse/core : 组合式API常用复用逻辑的集合

npm i @vueuse/core

2.封装图片懒加载的指令

useIntersectionObserver 方法

import { useIntersectionObserver } from '@vueuse/core'

export const directivePlugin = {
  install (app) {
    console.log(app)
    // app.directive  进行全局指令注册
    app.directive('img-lazy', {
      mounted (el, binding) {
        console.log(el, binding.value)
        // 懒加载的核心逻辑
        // 思路: 判断图片是否进入到视口区域 进来就正式加载图片
        // 实现方案: 1. 如何得知图片进入视口了?  2.如何能让图片开始加载? -> src赋值
        const { stop } = useIntersectionObserver(
          el, // 监听谁就把谁放过来
          ([{ isIntersecting }], observerElement) => {
            // isIntersecting: 监听的元素进入视口就是true 否则就是false
            // 比较严格 纵向和横向都会监听
            // 每次进来视口和出去视口都会重复执行
            // 如果我们想停止监听  手动调用stop方法
            console.log(isIntersecting)
            if (isIntersecting) {
              el.src = binding.value
              stop()
            }
          }
        )
      }
    })
  }
}

3.使用指令

 <ul class="goods-list">
   <li v-for="item in hotData" :key="item.id">
    <RouterLink to="/">
     <img alt="" v-img-lazy="item.picture" />
     <p class="name">{{ item.title }}</p>
     <p class="desc">{{ item.alt }}</p>
    </RouterLink>
   </li>
  </ul>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值