Vue3数值动画(NumberAnimation)

效果如下图:在线预览

在这里插入图片描述
在这里插入图片描述

APIs

参数说明类型默认值必传
from数值动画起始数值number0false
to数值目标值number1000false
duration数值动画持续时间,单位msnumber3000false
autoplay是否自动开始动画booleantruefalse
precision精度,保留小数点后几位number0false
prefix前缀string‘’false
suffix后缀string‘’false
separator千分位分隔符string‘,’false
decimal小数点字符string‘.’false
color数值文本颜色stringundefinedfalse
transition动画过渡效果TransitionFuncTransitionFunc[‘easeInOutCubic’]false

Events

事件名称说明参数
play播放动画() => void
started动画开始播放() => void
finished动画播放完成() => void

创建数值动画组件NumberAnimation.vue

<script setup lang="ts">
import { ref, computed, watchEffect, onMounted, watch } from 'vue'
import { useTransition, TransitionPresets } from '@vueuse/core'
enum TransitionFunc {linear = 'linear',easeOutSine = 'easeOutSine',easeInOutSine = 'easeInOutSine',easeInQuad = 'easeInQuad',easeOutQuad = 'easeOutQuad',easeInOutQuad = 'easeInOutQuad',easeInCubic = 'easeInCubic',easeOutCubic = 'easeOutCubic',easeInOutCubic = 'easeInOutCubic',easeInQuart = 'easeInQuart',easeOutQuart = 'easeOutQuart',easeInOutQuart = 'easeInOutQuart',easeInQuint = 'easeInQuint',easeOutQuint = 'easeOutQuint',easeInOutQuint = 'easeInOutQuint',easeInExpo = 'easeInExpo',easeOutExpo = 'easeOutExpo',easeInOutExpo = 'easeInOutExpo',easeInCirc = 'easeInCirc',easeOutCirc = 'easeOutCirc',easeInOutCirc = 'easeInOutCirc',easeInBack = 'easeInBack',easeOutBack = 'easeOutBack',easeInOutBack = 'easeInOutBack'
}
interface Props {from?: number // 数值动画起始数值to?: number // 数值目标值duration?: number // 数值动画持续时间,单位msautoplay?: boolean // 是否自动开始动画precision?: number // 精度,保留小数点后几位prefix?: string // 前缀suffix?: string // 后缀separator?: string // 千分位分隔符decimal?: string // 小数点字符color?: string // 数值文本颜色transition?: TransitionFunc // 动画过渡效果
}
const props = withDefaults(defineProps<Props>(), {from: 0,to: 1000,duration: 3000,autoplay: true,precision: 0,prefix: '',suffix: '',separator: ',',decimal: '.',color: undefined,transition: TransitionFunc['easeInOutCubic']
})
const source = ref(props.from)
watchEffect(() => {source.value = props.from
})
watch([() => props.from, () => props.to],() => {if (props.autoplay) {play()}}
)
onMounted(() => {props.autoplay && play()
})
const outputValue = useTransition(source, {duration: props.duration,transition: TransitionPresets[props.transition],onFinished: () => emits('finished'),onStarted: () => emits('started')})
function play () {source.value = props.to
}
const showValue = computed(() => formatNumber(outputValue.value))
function isNumber (val: any) {return Object.prototype.toString.call(val) === '[object Number]'
}
const emits = defineEmits(['started', 'finished'])
function formatNumber (num: number | string) {const { precision, decimal, separator, suffix, prefix } = propsif (num === 0) {return num.toFixed(precision)}if (!num) {return ''}num = Number(num).toFixed(precision)num += ''const x = num.split('.')let x1 = x[0]const x2 = x.length > 1 ? decimal + x[1] : ''const rgx = /(\d+)(\d{3})/if (separator && !isNumber(separator)) {while (rgx.test(x1)) {x1 = x1.replace(rgx, '$1' + separator + '$2')}}return prefix + x1 + x2 + suffix
}
defineExpose({play
})
</script>
<template><span :style="{ color }">{{ showValue }}</span>
</template>

在要使用的页面引入

<script setup lang="ts">
import NumberAnimation from 'NumberAnimation.vue'
import { ref } from 'vue'function onStarted () {console.log('started')
}
function onFinished () {console.log('finished')
}
const animationRef = ref()
function onClick () {animationRef.value.play()
}
</script>
<template><div><h1>NumberAnimation 数值动画</h1><h2 class="mt30 mb10">基本使用</h2><Row><Col :span="12"><Statistic title="一个小目标"><NumberAnimation :to="100000000.12345" /></Statistic></Col><Col :span="12"><Statistic title="一个小目标"><NumberAnimation :to="100000000.12345" separator="" /></Statistic></Col></Row><h2 class="mt30 mb10">精度</h2><Row><Col :span="12"><Statistic title="一个小目标"><NumberAnimation :from="0.00" :to="100000000.12345" :precision="2" /></Statistic></Col><Col :span="12"><Statistic title="一个小目标"><NumberAnimation :to="100000000.12345" :precision="3"/></Statistic></Col></Row><h2 class="mt30 mb10">自定义前缀 & 后缀</h2><Row><Col :span="12"><Statistic title="一个小目标"><NumberAnimationprefix="$":from="0":to="100000000" /></Statistic></Col><Col :span="12"><Statistic title="一个小目标"><NumberAnimation:from="0":to="100000000"suffix="元" /></Statistic></Col></Row><h2 class="mt30 mb10">自定义数值颜色</h2><Row><Col :span="12"><Statistic title="一个小目标"><NumberAnimation color="#1677FF" :from="0" :to="100000000"/></Statistic></Col></Row><h2 class="mt30 mb10">自定义播放和动画时间</h2><Row><Col :span="12"><Statistic title="一个小目标"><NumberAnimationref="animationRef":from="0":to="100000000":duration="5000":precision="2":autoplay="false"@started="onStarted"@finished="onFinished" /></Statistic><Button @click="onClick">播放</Button></Col></Row></div>
</template>

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

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

相关文章

NineData 中标移动云数据库传输项目

导读近日&#xff0c;玖章算术 NineData 智能数据管理平台成功中标《2023 年移动云数据库传输服务软件项目》&#xff0c;中标金额为 406 万。这标志着玖章算术 NineData 平台已成功落地顶级运营商行业&#xff0c;并在数据管理方面实现了大规模应用实践。 NineData 中标 2023 …

SQLite简单介绍

一.简单介绍 SQLite是一款轻型的数据库&#xff0c;是遵守ACID的关系型数据库管理系统&#xff0c;它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的&#xff0c;而且已经在很多嵌入式产品中使用了它&#xff0c;它占用资源非常的低&…

音频基础知识

文章目录 前言一、音频基本概念1、音频的基本概念①、声音的三要素②、音量与音调③、几个基本概念④、奈奎斯特采样定律 2、数字音频①、采样②、量化③、编码④、其他相关概念<1>、采样位数<2>、通道数<3>、音频帧<4>、比特率&#xff08;码率&#…

02-Flask-对象初始化参数

对象初始化参数 前言对象初始化参数import_namestatic_url_pathstatic_foldertemplate_floder 前言 本篇来学习Flask中对象初始化参数 对象初始化参数 import_name Flask程序所在的包(模块)&#xff0c;传__name__就可以 _name_ 是一个标识 Python 模块的名字的变量&#x…

2023_Spark_实验六:Scala面向对象部分演示(二)(IDEA开发)

7、Scala中的apply方法&#xff08;&#xff09; 遇到如下形式的表达式时&#xff0c;apply方法就会被调用&#xff1a; Object(参数1,参数2,......,参数N) 通常&#xff0c;这样一个apply方法返回的是伴生类的对象&#xff1b;其作用是为了省略new关键字 Object的apply方法…

MATLAB旋转动图的绘制

MATLAB旋转动图的绘制 文章目录 MATLAB旋转动图的绘制1、动图效果2、matlab代码 利用matlab实现三维旋转动图的绘制。 1、动图效果 2、matlab代码 close all clear clcf(x,y,z)(x.^2 (9./4).*y.^2 z.^2 - 1).^3 - x.^2.*z.^3 - (9./80).*y.^2.*z.^3; [x,y,z]meshgrid(linspac…

linux并发服务器 —— linux网络编程(七)

网络结构模式 C/S结构 - 客户机/服务器&#xff1b;采用两层结构&#xff0c;服务器负责数据的管理&#xff0c;客户机负责完成与用户的交互&#xff1b;C/S结构中&#xff0c;服务器 - 后台服务&#xff0c;客户机 - 前台功能&#xff1b; 优点 1. 充分发挥客户端PC处理能力…

RK开发板的USB连接(Ubuntu)

一、安装连接工具 sudo apt-get install putty 二、启动putty工具 sudo putty 三、连接usb&#xff0c;并查看相关的信息 # 查看接入的是否有usb ls /dev/tty* 显示如下&#xff1a;&#xff08;含有usb接口&#xff1a; /dev/ttyUSB0&#xff09; /dev/tty /dev/tty23 /d…

2.4 PE结构:节表详细解析

节表&#xff08;Section Table&#xff09;是Windows PE/COFF格式的可执行文件中一个非常重要的数据结构&#xff0c;它记录了各个代码段、数据段、资源段、重定向表等在文件中的位置和大小信息&#xff0c;是操作系统加载文件时根据节表来进行各个段的映射和初始化的重要依据…

微信小程序 通过响应式数据控制元素class属性

我想大家照这个和我最初的目的一样 希望有和vue中v-bind:class一样方便的指令 但答案不太尽人意 这里 我们只能采用 三元运算符的形式 参考代码如下 <view class"item {{ userId item.userId ? isThisUser : }}"> </view>这里 我们判断 如果当前ite…

【Java】关于JDK 8的HashMap

文章目录 HashMap 简介数据结构Hash构造方法get(key)方法步骤一&#xff1a;通过key获取所在桶的第一个元素是否存在步骤二:该节点的hash和key是否与要查询的hash和key匹配步骤三:当对应桶中不止一个节点时&#xff0c;根据不同节点类型查询 put(key,value)为什么树化&#xff…

elasticsearch分析插件 安装analysis-ik

首先下载安装es 和 插件 &#xff0c;注意 两者的版本要保持一致,如果要用到kibana 则三者保持一致 ik&#xff1a;https://github.com/medcl/elasticsearch-analysis-ik/releases es/kibana&#xff1a;https://www.elastic.co/cn/downloads/past-releases/ 然后在 es— elast…

【Node.js】Node.js安装详细步骤和创建Express项目演示

Node.js是一个开源的、跨平台的JavaScript运行环境&#xff0c;用于在服务器端运行JavaScript代码。它提供了一个简单的API&#xff0c;可以用于开发各种网络和服务器应用程序。 以下是Node.js的安装和使用的详细步骤和代码示例&#xff1a; 1、下载Node.js 访问Node.js官方…

异步驱动电机总成汇总

特斯拉双电机 蔚来ET7异步电驱 蔚来ET5异步电驱 问界M5异步电驱 比亚迪海豹异步异步电驱 汇川800v异步电驱 阿维塔异步电驱 小鹏G6异步电驱 小鹏G9异步电驱 大众ID4异步电驱 奥迪etron异步电驱 欢迎补充&#xff5e;&#xff5e;&#xff5e;欢迎转载&#xff01;&#xff01;&…

47、TCP的流量控制

从这一节开始&#xff0c;我们学习通信双方应用进程建立TCP连接之后&#xff0c;数据传输过程中&#xff0c;TCP有哪些机制保证传输可靠性的。本节先学习第一种机制&#xff1a;流量控制。 窗口与流量控制 首先&#xff0c;我们要知道的是&#xff1a;什么是流量控制&#xff…

电脑怎么设置定时关机,2个简单的操作

电脑作为现代生活中不可或缺的工具&#xff0c;我们通常会在工作或娱乐过程中使用它。但有时候&#xff0c;我们可能需要在一段时间后自动关机&#xff0c;例如在下载完成后或在睡觉前。那么电脑怎么设置定时关机呢&#xff1f;为了满足这种需求&#xff0c;电脑提供了多种定时…

手写Mybatis:第9章-细化XML语句构建器,完善静态SQL解析

文章目录 一、目标&#xff1a;XML语句构建器二、设计&#xff1a;XML语句构建器三、实现&#xff1a;XML语句构建器3.0 引入依赖3.1 工程结构3.2 XML语句构建器关系图3.3 I/O资源扫描3.4 SQL源码3.4.1 SQL对象3.4.2 SQL源码接口3.4.3 原始SQL源码实现类3.4.4 静态SQL源码实现类…

C到C++的升级

C和C的关系 C继承了所有C语言的特性&#xff1b;C在C的基础上提供了更多的语法和特性&#xff0c;C语言去除了一些C语言的不好的特性。C的设计目标是运行效率与开发效率的统一。 变化一&#xff1a;所有变量都可以在使用时定义 C中更强调语言的实用性&#xff0c;所有的变量…

CentOS7 Hadoop3.3.0 安装与配置

一、安装JDK 1、创建文件夹tools和training用于存放压缩包和解压使用&#xff0c;tools存放压缩包&#xff0c;training用于解压后安装jdk和hadoop的路径。 1&#xff09;回到路径为 / 的位置 cd /2) 创建 tools 和 training mkdir toolsmkdir training3) 进入tools文件夹 …

测试工程师的领航指南:《Effective软件测试》

目录 前言一、本书适合对象二、本书大纲第1章&#xff1a;有效和系统的软件测试第2章&#xff1a;基于需求规格的测试第3章&#xff1a;结构化测试与代码覆盖第4章&#xff1a;契约式设计第5章&#xff1a;基于属性的测试第6章&#xff1a;测试替身和模拟对象第7章&#xff1a;…