当前位置: 首页 > article >正文

通过自定义指令实现图片懒加载

前提:使用到了VueUse插件。
先创建自定义插件文件夹

// 定义懒加载插件
import { useIntersectionObserver } from '@vueuse/core' // 这个是VueUse里的一个方法

export const lazyPlugin = {
  install(app) {
    // 懒加载指令逻辑  定义全局指令
    app.directive('img-lazy', {
      mounted(el,binding) {
        // el: 指令绑定的元素 在这里指img元素
        // binding:binding.value 指令等于号后面绑定的表达式的值 这里指图片url
        // useIntersectionObserver方法是判断目标元素是否进入视口区域
        // 解构出stop方法,手动停止监听防止内存浪费
        const { stop } = useIntersectionObserver(
          el,
          ([{ isIntersecting }]) => {
            if (isIntersecting) {
              // 进入视口区
              el.src = binding.value
              stop()
            }
          },
        )
      }
    })
  }
}

在需要实现图片懒加载区域添加上自定义指令

<img v-img-lazy="item.picture" alt="">

在main.js中引入注册

// 引入懒加载指令插件并注册
import { lazyPlugin } from './directives'
const app = createApp(App)
app.use(lazyPlugin)

注意点就是:useIntersectionObserver对于元素的监听是一直存在的,除非手动停止监听,所以stop方法的目的就是:在监听的图片第一次完成加载之后就停止监听


http://www.kler.cn/a/379621.html

相关文章:

  • 批量删除redis数据【亲测可用】
  • Android:ViewPaper动态添加移除第一页
  • git reset 删除错误提交
  • 【C++】哈希表模拟:开散列技术与哈希冲突处理
  • 基于Spring Boot的中小型制造企业质量管理系统设计与实现,LW+源码+讲解
  • 鸿蒙ArkTS中的面向对象编程
  • 在VScode中配置C_C++环境
  • 使用nvm切换node版本失败
  • Python 一维列表基础语法
  • LM Head weights;ChatGPT-3词汇量:175,000;llama7b 词汇量,词嵌入维度:4096
  • 【LeetCode】移除链表中等于设定值的元素、反转链表
  • 创维E900-S_华为EC6108V9_v9u_海思hi3798mv100华为系统优盘刷机固件包
  • CesiumJS 案例 P20:监听鼠标滚轮、监听鼠标左键按下与松开、监听鼠标右键按下与松开、监听鼠标左击落点
  • Linux:线程安全的单例模式
  • 进程的概念
  • Vue学习之路16----pinia
  • 家具产品的耐用性新标准,矫平机为家具制造提供新保障
  • SQL中`ORDER BY`、`SORT BY`、`DISTRIBUTE BY`、`GROUP BY`、`CLUSTER BY`的区别详解
  • 什么是严肃游戏,严肃游戏本地化的特点是什么?
  • 【C语言刷力扣】3216.交换后字典序最小的字符串
  • 第十五章 Vue工程化开发及Vue CLI脚手架
  • 贪心算法理论基础和习题【算法学习day.17】
  • Python代码解析:问题分类器实现
  • el-table type=“selection“换页多选数据丢失的解决办法
  • dify实战案例分享-基于多模态模型的发票识别
  • git submodule