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

【Vue】图片懒加载的实现

封装全局指令img-lazy

// 定义懒加载插件
import { useIntersectionObserver } from '@vueuse/core'export const lazyPlugin = {install (app) {// 懒加载指令逻辑app.directive('img-lazy', {mounted (el, binding) {// el: 指令绑定的那个元素 img// binding: binding.value  指令等于号后面绑定的表达式的值  图片urlconsole.log(el, binding.value)const { stop } = useIntersectionObserver(el,([{ isIntersecting }]) => {console.log(isIntersecting)if (isIntersecting) {// 进入视口区域el.src = binding.valuestop()}},)}})}
}

注册全局指令

// 全局指令注册
import {lazyPlugin} from "@/directives";
app.use(lazyPlugin)

重构HomeHot.vue,从而实现懒加载效果,提高页面加载性能

  <ul class="goods-list"><li v-for="item in hotList" :key="item.id"><RouterLink to="/"><img v-img-lazy="item.picture" alt=""><p class="name">{{ item.title }}</p><p class="desc">{{ item.alt }}</p></RouterLink></li></ul>

有一点需要说明:IntersectionObserver是异步库,这样即使目标元素一开始就在视口中,回调函数的执行也会在解构赋值之后,这样能够确保stop方法在回调函数中调用时已经被正确解构。

相关文章:

  • 【计算机】我不允许还有人不知道数据库是什么
  • Rust语言-线程间的消息传递mpsc::Sender
  • echarts Y轴展示时间片段,series data数据 也是时间片段,鼠标放上去 提示框显示对应的时间片段
  • 【计算机毕业设计】​206校园顺路代送微信小程序
  • 基于S32K144驱动NSD8308
  • 梯度提升决策树(GBDT)的训练过程
  • P10552 [THUPC2024] 警钟长鸣
  • 【安全】Linux Fanotify使用入门
  • 计算机基础学习有多重要?学哪些?如何学?
  • 基于SpringBoot+Vue大学生网络教学平台设计和实现(源码+LW+调试文档+讲解等)
  • mongodb嵌套聚合
  • DataWhale - 吃瓜教程学习笔记(二)
  • 【ThreeJS】Threejs +Vue3 开发基础
  • ASCII 空字符 ‘\0’ ,与空格字符‘ ’
  • 【技巧】Leetcode 201. 数字范围按位与【中等】
  • @angular/forms 源码解析之双向绑定
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Codepen 每日精选(2018-3-25)
  • css的样式优先级
  • gops —— Go 程序诊断分析工具
  • HTTP 简介
  • input实现文字超出省略号功能
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • MySQL数据库运维之数据恢复
  • PhantomJS 安装
  • Theano - 导数
  • vagrant 添加本地 box 安装 laravel homestead
  • 构建工具 - 收藏集 - 掘金
  • 猴子数据域名防封接口降低小说被封的风险
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 力扣(LeetCode)22
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 算法-插入排序
  • zabbix3.2监控linux磁盘IO
  • ‌Excel VBA进行间比法设计
  • # 安徽锐锋科技IDMS系统简介
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • $().each和$.each的区别
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (2)Java 简介
  • (层次遍历)104. 二叉树的最大深度
  • (分布式缓存)Redis哨兵
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • ***通过什么方式***网吧
  • .describe() python_Python-Win32com-Excel
  • .gitattributes 文件
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET Micro Framework初体验(二)
  • .NET8 动态添加定时任务(CRON Expression, Whatever)