vue3自定义指令(图片懒加载)

news/2025/1/13 7:39:06/文章来源:https://www.cnblogs.com/xikui/p/18243475

一、作用:

创建类似与v-for、v-on的指令;本文以图片的懒加载为例

注册函数:

app.directive(key, directive);

二、vue3自定义指令钩子函数

created:在绑定元素的 attribute 或事件监听器被应用之前调用。在指令需要附加在普通的 v-on 事件监听器调用前的事件监听器中时,这很有用。

beforeMount:当指令第一次绑定到元素并且在挂载父组件之前调用。

mounted:在绑定元素的父组件被挂载后调用,大部分自定义指令都写在这里。

beforeUpdate:在更新包含组件的 VNode 之前调用。

updated:在包含组件的 VNode 及其子组件的 VNode 更新后调用。

beforeUnmount:在卸载绑定元素的父组件之前调用

unmounted:当指令与元素解除绑定且父组件已卸载时,只调用一次


引用自如下:
原文链接:https://blog.csdn.net/snowball_li/article/details/123549051

三、创建一个懒加载的ts文件如(lazy.ts):

import loading from '@/assets/images/loading.png';
import placeholder from '@/assets/images/placeholder.png';

export default {
beforeMount(el: HTMLImageElement) {
const img = el;
const src = img.getAttribute('src');
if (!src) {
img.setAttribute('src', placeholder);
return;
}
// 图片使用loading gif替换
img.setAttribute('src', loading);
// 新建Image对象
const tempImg = new Image();
tempImg.onload = function () {
img.setAttribute('src',src);
};
tempImg.onerror = () => {
img.setAttribute('src', placeholder);
};
const observer = new IntersectionObserver(function (changes) {
// img元素进入可视区域
changes.forEach((item) => {
if (item.intersectionRatio !== 0) {
tempImg.src = <string>src;
}
});
});
observer.observe(el);
},
};
四、程序入口文件加载该指令:

import type { App, Directive } from 'vue';
import lazy from './lazy';

const app = createApp(App);
app.directive("lazy ", lazy );
五、页面可使用该指令

<img v-lazy :src="pigUrl" />
这样,在img展示图片时,会先展示加载中动画,然后如果能请求到图片就展示图片,否在展示默认图片

六、其他说明

IntersectionObserver可参考js原始用途:IntersectionObserver(交叉观察器)-CSDN博客
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/q893668680/article/details/136759166

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/723644.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探讨GIS在市场分析、商业选址和物流优化中的核心作用

在当今竞争激烈的商业环境中,精确的数据分析与洞察力是企业制胜的关键。地理信息科学(GIS)作为一种强大的空间分析工具,正逐步渗透并重塑商业智能的多个层面。本文将深入剖析GIS如何在市场分析、商业选址以及物流优化中发挥着不可小觑的作用,为企业战略决策提供精准导航。…

MySql 增、删、改、查数据库

创建 数据库 前言 之前几天写了MySql 的GROUP BY 语句和 JOIN 语句,今天补一下创建数据库、表的语句。首先假设已经暗转好MySQL 数据库,然后创建数据库、表。 创建数据库 create database [if not exists] 数据库名;[CHARACTER SET charset_name][COLLATE collation_name];if…

【mysql】PROCESSLIST 查看运行中的线程

发现 mysql 语句查询响应特别慢,想看一下mysql现时正在做什么事情? 通过以下语句,可以看mysql有哪些线程正在运行,也可以帮助定位问题。比如有一些运行特别久的语句。 用这个语句看一下:show processlist show full processlist或者用这个语句:select * from information…

e语言 获取微信安装路径

demo本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/18243409

已经解决: 未连接:有潜在的安全问题 Firefox 检测到潜在的安全威胁,并因 github.com 要求安全连接而没有继续

最近在访问github.com网站的时候,提示安全问题而不能访问,尝试添加例外网站地址后得以解决,分享给需要的朋友。 访问github网站出现的问题 解决 未连接:有潜在的安全问题 Firefox 检测到潜在的安全威胁,并因 github.com 要求安全连接而没有继续。把https://github.com添加…

专业的跨网软件,需要具备怎样的产品性能及优势?

国家对数据安全要求和管理日益严格,要求规范化和标准化。像军工单位、科研院所、高科技企业、医疗医药、高新制造等单位,会涉及到核心保密数据。因此为了保护网络不受外部威胁和内部误操作的影响,通常会进行网络隔离,隔离成内网和外网。下面可以了解一些隔离方式:1.网闸/光…

[OpenBMC] LDAP 设定(三) - LDAPS(LDAP over TLS)

终于到了最后一个部分 LDAPS, 这部分我们会依序介绍TLS的原理(这边会补充密码学基础)非对称式加密 vs 对称式加密 数位签章 数位凭证 TLS 握手(hankshake)如何产生凭证 上传凭证到LDAP Server 上传凭证到BMC 有可能会遇到的问题 (补充我遇到的问题) TLS的原理 对称式加密 vs 非…

支持多样化同步需求的增量数据同步方案,了解一下!

增量数据同步方案是一种在数据管理中广泛使用的技术,它主要目的是高效地同步源数据和目标数据之间的数据变化。目前越来越多的企业要求内部各种业务数据在多台服务器之间、多个数据中心之间,乃至多云和本地之间调度和同步,增量数据同步也成为越来越普遍的需求。企业IT部门管…

FPGA/ZYNQ:中值滤波

一、简述 滤波是图像处理领域应用非常广泛的工具之一,它可以改善图像质量,包括去除高频噪声与干扰、图像平滑等。我们常见的空间滤波有中值滤波和均值滤波。图像可以看成是一个定义在二维平面上的信号,该信号的幅值对应像素的灰度(彩色图像对应 RGB 三个分量)。图像的频率…

2024.6.13(周四)

H = 2 * eye(3);f = zeros(3,1);Aeq = [1 1 0; 1 0 1];beq = [1;0];x0 = [0; 0; 0];% 调用quadprog函数求解[x,fval] = quadprog(H, f, [], [], Aeq, beq, [], [], x0);disp(最优解为:); disp(x); disp(对应的最优值为:); disp(fval);

[OpenBMC] LDAP 设定(二) - openldap 伺服架设与BMC的设定

这篇会接续介绍ldap server的架设和redfish/web设定,因为openbmc支援了 openldap 和 windows 的ad,这篇选用OpenLDAP server架设为范例 在Ubuntu上架设OpenLDAP Server OpenLDAP是轻型目录访问协议(Lightweight Directory Access Protocol)的开源实现。通常用来管理公司组织的…