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

【vue3】vue3中封装懒加载指令

在图片很多的电商网站,或者是大量图片展示的企业官网中,性能优化的一个关键技术点就是图片的延迟加载,即懒加载
优点就是减少了图片的http请求次数,减轻服务器压力

实现效果

请添加图片描述

代码实现

这里借助于第三方的vue3专用的工具库VueUse来封装懒加载指令

import { ref } from "vue";
import { useIntersectionObserver } from "@vueuse/core";
import loading from "@a/images/loading.gif";const vLazyImg = {name: "lazy-img",  mounted: (el, bingding) => {const target = ref(el);const targetIsVisible = ref(false);const { stop } = useIntersectionObserver(target,([{ isIntersecting }], observerElement) => {targetIsVisible.value = isIntersecting;if (isIntersecting) {el.src = bingding.value;// 优化性能,停止监听stop();} else {el.src = loading;}});},
};
export default vLazyImg;
  • 使用说明
    1.name: "lazy-img"纪实指令的名称,也就是我们在模版中用来关联某个dom节点,一般使用方式是加上前缀v-
    2.useIntersectionObserver开启监听后会一直存在,需要我们在监听完成后要手动销毁这个监听器,减少内存的占用

  • 指令注册
    可以注册成全局的也可以是局部的,根据使用的范围来定
    也可以注册成插件的形式,来全局使用

import vHighlight from "./modules/v-highlight";
import vLazy from "./modules/v-lazy";const directives = [vHighlight, vLazy];function createDirectives(app) {for (const directive of directives) {app.directive(directive.name, directive);}
}export default createDirectives;
// main.js注册自定义插件
app.use(customPlugin);
  • 组件使用方法
<li v-for="item in newList" :key="item.id"><router-link :to="`/detail/${item.id}`"><img v-lazy-img="item.picture" alt="" /><p class="name ellipsis">{{ item.name }}</p><p  class="price">&yen;{{ item.price }}</p></router-link>
</li>
http://www.xdnf.cn/news/363547.html

相关文章:

  • C++ Lambda表达式详解:匿名函数的艺术与现代编程实践
  • 数字经济时代下的消费行为变迁与经济学启示
  • 解决 Redis 缓存与数据库一致性问题的技术指南
  • 【Linux网络】Socket-TCP相关函数
  • 大模型提示词策略
  • 赋能智能交通:时空图卷积网络引领速度预测新变革
  • PostgreSQL技术大讲堂 - 第89讲:重讲数据库完全恢复
  • 图解gpt之Seq2Seq架构与序列到序列模型
  • 【某OTA网站】phantom-token 1004
  • vue 监听元素大小变化 element-resize-detector
  • 《Vuejs与实现》第 6 章(原始值响应式方案)
  • 蓝桥杯青少 图形化编程(Scratch)编程题每日一练——图形特效
  • 嵌套路由~
  • leetcode - 双指针问题
  • Linux C语言线程编程入门笔记
  • uni-app 中的条件编译与跨端兼容
  • 区块链详解
  • 独立自主的网络浏览器——Ladybird
  • 类加载器, JVM类加载机制
  • 【PostgreSQL 中插入数据时跳过已存在记录的方法】
  • 阿里云服务器数据库故障排查指南?
  • springboot 加载 tomcat 源码追踪
  • Web端项目系统访问页面很慢,后台数据返回很快,网络也没问题,是什么导致的呢?
  • NVME / DoCA 是什么?
  • 开源数字人框架 AWESOME-DIGITAL-HUMAN 技术解析与应用指南
  • 【Ansible】模块详解
  • 切比雪夫不等式专题习题解析
  • 国联股份卫多多与北京经纬智诚签署战略合作协议
  • 使用Python和TensorFlow实现图像分类的人工智能应用
  • 计算人声录音后电平的大小(dB SPL->dBFS)