【Vue】vue3中通过自定义指令实现数字的动态增加动画

news2025/1/11 18:34:49

在Vue 3中通过自定义指令实现数字的动态增加动画,可以利用Vue的自定义指令功能,这允许你扩展Vue的内置指令,使得DOM操作更加灵活和强大。以下是如何创建一个自定义指令来实现数字动态增加动画的步骤:

效果演示

在这里插入图片描述

代码实现

1、定义指令代码

import { Directive } from 'vue';

// 动画持续时间,ms
const DURATION = 1500;

/**
 * @description 基于Vue3自定义指令,实现数字递增动画效果
 *
 * @example     `<div v-increase="100"></div>`
 */
export const increase: Directive = {
  // 在绑定元素的父组件
  // 及他自己的所有子节点都挂载完成后调用
  mounted(el, binding) {
    const { value: maxCount } = binding;

    el.$animation = animate((progress) => {
      el.innerText = Math.floor(maxCount * progress);
    }, DURATION);
  },
  // 绑定元素的父组件卸载后调用
  unmounted(el) {
    el.$animation.cancel();
  },
};

/**
 * @description             基于requestAnimationFrame,实现在持续时间内执行动画的方法
 *
 * @param fn                动画执行函数,参数progress表示完成的进度
 * @param duration          动画持续时间
 * @returns {object.cancel} 取消动画
 */
export const animate = function (fn: (progress: number) => void, duration: number) {
  const animate = () => {
    animation = requestAnimationFrame(animate);

    const now = new Date().getTime();
    const progress = Math.floor(((now - START) / duration) * 100) / 100;
    fn(progress > 1 ? 1 : progress);
    // 到达持续时间,结束动画
    if (now - START > duration) {
      cancel();
    }
  };

  const cancel = () => {
    cancelAnimationFrame(animation);
  };

  const START = new Date().getTime();

  let animation = requestAnimationFrame(animate);
  return {
    cancel: () => {
      cancelAnimationFrame(animation);
    },
  };
};

2、注册自定义指令

import { type App } from 'vue';
import { increase } from './increase';

/** 挂载自定义指令 */
export function loadDirectives(app: App) {
  app.directive('increase', increase);
}

3、加载自定义指令

main.ts

import { loadDirectives } from '@/directives';

/** 加载自定义指令 */
loadDirectives(app);

参考资料

自定义指令 | Vue.js
基于Vue3自定义指令,实现数字递增动画效果的v-increase

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四种推荐算法——Embedding+MLP、WideDeep、DeepFM、NeuralCF

一、EmbeddingMLP模型 EmbeddingMLP 主要是由 Embedding 部分和 MLP 部分这两部分组成&#xff0c;使用 Embedding 层是为了将类别型特征转换成 Embedding 向量&#xff0c;MLP 部分是通过多层神经网络拟合优化目标。——用于广告推荐。 Feature层即输入特征层&#xff0c;是模…

【C++】string类——模拟实现

&#x1f680;个人主页&#xff1a;奋斗的小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 前言&#x1f4a5;1、string类主要函数接口&#x1f4a5;2、string类的模拟实现&#x1f4a5;2.1 构造和析构…

【Material-UI】FormGroup 组件:多选框分组的最佳实践详解

文章目录 一、FormGroup 组件概述1. 组件介绍2. 组件的基本结构 二、FormGroup 的关键特性1. 逻辑分组2. 状态管理3. 错误处理 三、FormGroup 的实际应用场景1. 多选项管理2. 逻辑验证3. 用户偏好设置4. 表单提交 四、注意事项1. 无障碍支持2. 样式定制 五、总结 在 Material-U…

AWVS下载安装使用教程图文教程(超详细)

《网络安全自学教程》 AWVS&#xff08;Acunetix Web Vulnerability Scanner&#xff09;是一款常用的Web网站漏洞扫描工具。 AWVS扫描时&#xff0c;对数据库有增删改的操作&#xff0c;部分渗透项目禁止使用&#xff0c;在实际环境中需要注意。 这篇文章使用 Windows Serve…

30个UI设计师应该掌握的专业术语

每个领域都有自己的专有名词和术语&#xff0c;掌握它们才能更好地和工作伙伴沟通。作为一名资深UI设计师&#xff0c;我整理了以下30个UI设计师应该掌握的专业术语&#xff0c;希望能帮助大家更好地理解和运用这些概念。 这些术语包含三大类&#xff1a;基础名词、常用UI设计…

藏品管理系统的流程

1、文物征集&#xff1a; - 通过购买、捐赠、交换、考古发掘等方式征集文物。 征集过程中需遵守国家法律法规和相关规定。 2、文物鉴定&#xff1a; - 对新发现的文物和征集的文物进行专业鉴定&#xff0c;确定其是否具有历史、艺术、科学价值。 3、 文物登记&…

【吊打面试官系列-Elasticsearch面试题】详细描述一下 Elasticsearch 索引文档的过程?

大家好&#xff0c;我是锋哥。今天分享关于 【详细描述一下 Elasticsearch 索引文档的过程?】面试题&#xff0c;希望对大家有帮助&#xff1b; 详细描述一下 Elasticsearch 索引文档的过程? 协调节点默认使用文档 ID 参与计算&#xff08;也支持通过 routing&#xff09;&am…

个人经典例程与研究方向总目录

&#x1f381; 私信可获得仿真数据、论文与建模的仿真定制 &#x1f447; 订阅本人任意付费专栏的朋友&#xff0c;均可私信&#xff0c;免费获取一维EKF/UKF的MATLAB例程 目前的研究方向 1 导航与定位 卡尔曼滤波跟踪、二维三维轨迹计算、平面立体目标跟踪、 2 智能算法方面…

顶顶通手机助手拦截方案

现在很多品牌的手机&#xff0c;都自带语音助手&#xff0c;比如我用的是小米手机&#xff0c;就自带小爱助手&#xff0c;可以自动接听各种广告营销电话。如果来电号码被标记为广告营销&#xff0c;小爱助手就会自动应答&#xff0c;然后模拟真人进行对话。 现在自动外呼系统拨…

二次注入(sql靶场第24关+网鼎杯comment二次注入+网鼎杯-2018-Web-Unfinish)

目录 二次注入 sql靶场第24关 网鼎杯comment二次注入 网鼎杯-2018-Web-Unfinish 二次注入 sql靶场第24关 二次注入我觉得是特别有意思&#xff0c;首先依然是查看页面 可以看出来这一关十分的丰富&#xff0c;可以注册&#xff0c;修改和登录&#xff0c;那我们先试着注册…

工地云SaaS系统,通过物联网与可视化等先进技术的综合应用,搭建的智慧工地管理云平台源码

通过物联网与可视化等先进技术的综合应用&#xff0c;搭建智慧工地管理云平台。以绿色、安全施工管理为主线&#xff0c;从人员、设备、环境、监控#度管理、施工管理、工程管理等多个维度对现场要素进行信息化&#xff0c;实现数据实时更新、人员精确管理、风险及时预警、管理便…

六,业务功能:登录

六&#xff0c;业务功能&#xff1a;登录 文章目录 六&#xff0c;业务功能&#xff1a;登录编写 AuthController 作为登录控制器编写 EmpService 业务处理编写 target.html 登录成功页面显示启动 Tomcat 服务器&#xff0c;运行测试 编写 AuthController 作为登录控制器 在 d…

【区块链+社会公益】人民链数字福虎 | FISCO BCOS应用案例

人民链在 2022 年春节期间发起保护生物多样性的公益活动——“数字福虎迎新春”&#xff0c;通过区块链技术&#xff0c;探索迎新 春 新公益&#xff0c;助力保护“生物多样性”。 由人民在线开发的人民链客户端定位为“口袋里的大数据管 家”&#xff0c;通过“超级 ID”数字…

redis面试(九)锁重入和互斥

可重入 1&#xff09;如果一开始这个锁是没有的&#xff0c;第一次来加锁&#xff0c;这段lua脚本会如何执行&#xff1f; "if (redis.call(‘exists’, KEYS[1]) 0) then " "redis.call(‘hset’, KEYS[1], ARGV[2], 1); " "redis.call(‘pexpi…

【按键精灵安卓版小精灵进程守护-崩溃自启中(原理篇·下)】安卓版按键小精灵崩溃自启插件兼容不同系统在游戏场景和非游戏场景下的自启,源码分享。

按键精灵安卓版小精灵进程守护-崩溃自启中&#xff08;原理篇下&#xff09; 前言一、了解几个重要的Android命令1.getevent——事件查看捕获2.sendevent——底层事件模拟 二、逻辑解析1.获取设备名称2.获取tap事件序列3.获取映射关系4.自定义底层点击 三、代码实现1.设备获取2…

windows和office微软官方免费激活教程

微软提供了windows系统和office的官方免费激活&#xff0c;其实不用去买什么激活码&#xff0c;官方提供了激活方式&#xff0c;完全免费。目前测试没发现什么问题&#xff0c;windows还支持永久激活&#xff0c;比一些乱七八糟的kms激活工具还省心。 github地址&#xff1a;Gi…

《Ubuntu22.04环境下的ROS2学习笔记0》

一、下载并配置vscode 前面的安装过程就不再多赘述了&#xff0c;和ROS1中一样&#xff0c;参考链接在这里 《Ubuntu20.04环境下的ROS进阶学习1》_ubuntu20.04安装vscode及插件-CSDN博客 二、vscode扩展功能下载 a、简体中文语言包 中文语言包下载完后软件会提醒你restart软件…

博物馆藏品管理,从手动到智能:RFID手持扫描器的高效之旅

在博物馆藏品管理的漫长历史中&#xff0c;我们见证了从手工记录到数字化管理的巨大转变。今天&#xff0c;我们要讲述的&#xff0c;是这一转变中的一个重要里程碑——RFID手持扫描器的引入&#xff0c;它标志着博物馆藏品管理从手动走向智能的高效之旅。 首先&#xff0c;让我…

Java常见面试题-13-FastDFS

文章目录 FastDFS 是什么&#xff1f;FastDFS 组成FastDFS 的流程FastDFS 如何现在组内的多个 storage server 的数据同步&#xff1f; FastDFS 是什么&#xff1f; FastDFS 是一个开源的轻量级分布式文件系统&#xff0c;它可以对文件进行管理&#xff0c;功能包括&#xff1…

Linux驱动开发—中断,中断号,中断控制器GIC,中断子系统架构详解

文章目录 1.中断的基本概念2.中断上下文中断上下文的主要特点中断上下文的限制顶半部和底半部 3.中断子系统架构中断控制器GICGIC 的层级结构 中断控制器级联基本概念级联中断控制器的工作原理 中断号概念基本概念中断号的作用中断号的分配ARM 架构和 GIC 总体架构图 4.申请一个…