在 Vue 3 中使用 canvas-confetti 插件

🎉 在 Vue 3 中使用 canvas-confetti 插件

canvas-confetti 是一个轻量、无依赖的 JavaScript 动画库,用于在网页上展示彩带、庆祝动画。非常适合用于抽奖、支付成功、活动庆祝等场景。

本教程将指导你如何在 Vue 3 项目中集成并使用该插件。


📦 安装

使用 npm 或 pnpm 安装:

npm install canvas-confetti
# 或者
pnpm add canvas-confetti

🛠️ 在 Vue 3 中基本使用

1. 创建一个可重用组件(ConfettiCanvas.vue

<template><canvas ref="canvas" class="confetti-canvas"></canvas>
</template><script setup>
import { onMounted, ref } from 'vue'
import confetti from 'canvas-confetti'const canvas = ref(null)
let myConfetti = nullonMounted(() => {if (canvas.value) {// 创建 confetti 实例,绑定 canvasmyConfetti = confetti.create(canvas.value, {resize: true,useWorker: true})}
})// 暴露一个函数用于触发
defineExpose({fire: () => {myConfetti &&myConfetti({particleCount: 100,spread: 70,origin: { y: 0.6 }})}
})
</script><style scoped>
.confetti-canvas {position: fixed;top: 0;left: 0;pointer-events: none;width: 100vw;height: 100vh;z-index: 9999;
}
</style>

2. 在父组件中使用

<template><button @click="launchConfetti">庆祝一下!</button><ConfettiCanvas ref="confettiRef" />
</template><script setup>
import { ref } from 'vue'
import ConfettiCanvas from './components/ConfettiCanvas.vue'const confettiRef = ref(null)function launchConfetti() {confettiRef.value?.fire()
}
</script>

💡 进阶用法

// 自定义彩带颜色、角度、速度
myConfetti({angle: 90,spread: 360,startVelocity: 45,particleCount: 150,origin: { x: 0.5, y: 0.5 },colors: ['#bb0000', '#ffffff', '#00bb00']
})

🪝 options参数说明

该参数是一个可选对象,它具有以下属性:confetti options

  • particleCount Integer (默认值: 50):要启动的五彩纸屑的数量。越多越有趣…但要酷一点,这涉及到很多数学。
  • angle Number (default : 90):发射五彩纸屑的角度,以度为单位。90 是笔直向上的。
  • spread Number (default: 45):五彩纸屑可以偏离中心多远,以度为单位。45 表示五彩纸屑将在定义的正负 22.5 度处发射。angle
  • startVelocity 数字 (默认值:45):五彩纸屑开始移动的速度,以像素为单位。
  • decay Number (default: 0.9):五彩纸屑失去速度的速度。将此数字保持在 0 到 1 之间,否则五彩纸屑会加速。更好的是,永远不要改变它。
  • gravity Number (default: 1):粒子下拉的速度。1 是全重力,0.5 是半重力,依此类推,但没有限制。如果您愿意,您甚至可以使粒子上升。
  • drift Number (default: 0):五彩纸屑将漂移到一侧的程度。默认值为 0,这意味着它们将直接下降。对 left 使用负数,对 right 使用正数。
  • flat 布尔值 (默认值: false):(可选)关闭三维五彩纸屑在现实世界中会具有的倾斜和摆动。是的,他们看起来有点难过,但你们都要求他们,所以不要怪我。
  • ticks Number (default: 200):五彩纸屑移动的次数。这是抽象的…但是,如果五彩纸屑对您来说消失得太快,请玩弄它。
  • origin Object:从何处开始发射五彩纸屑。如果您愿意,请随时在屏幕外启动。
  • origin.x 数字 (默认值:0.5):页面上的位置,分别是左边缘和右边缘。x01
  • origin.y 数字 (默认值:0.5):页面上的位置,上边缘和下边缘。y01
  • colors Array:颜色字符串数组,十六进制格式…你知道的,比如 .#bada55
  • shapes 数组<字符串|Shape>:五彩纸屑的形状数组。有 、 和 的 3 个内置值。默认设置是在均匀混合中同时使用正方形和圆形。要使用单个形状,您可以在数组中只提供一个形状,例如 .您还可以通过提供一个值来更改组合,例如使用两个第三个圆和一个第三个正方形。您还可以使用 confetti.- - shapeFromPath 或 confetti.shapeFromText 帮助程序方法创建自己的形状。squarecirclestar[‘star’][‘circle’, ‘circle’, ‘square’]
  • scalar Number (default : 1):每个五彩纸屑粒子的缩放因子。使用小数点使五彩纸屑更小。继续,试试微小的五彩纸屑,它们很可爱!
  • zIndex Integer (default: 100):毕竟,五彩纸屑应该在上面。但是如果你有一个疯狂的高页,你可以把它设置得更高。
  • disableForReducedMotion 布尔值 (默认值: false):为喜欢减少运动的用户完全禁用五彩纸屑。在这种情况下,承诺将立即解决。confetti()

我之前开发中有一组好用的参数配置,大家可以参考下

// 多个角度方向触发爆炸
const angles = [60, 120, 180, 240, 300, 360];
angles.forEach((angle) => {canvasRefs.value.confetti({particleCount: 30,spread:40,               // 爆炸范围大startVelocity: 18,         // 爆炸速度快angle,                     // 多角度发射origin: { x: 0.5, y: 0.4 }, // 居中爆炸scalar: 1.2,decay: 0.9});
});

❓ 问题清单

1.部分手机上会出现无法加载问题,比如小米手机上自带的浏览器无法显示?
需要将useWorker设置为false,

✅ 总结

  • canvas-confetti 适合快速接入各种庆祝场景
  • 在 Vue 3 中封装成组件便于重复使用
  • 配合 ref 和 defineExpose 可从外部调用动画触发函数

📚 参考资料

  • canvas-confetti 官方文档
  • GitHub 源码

如果还有类似的炫酷插件欢迎分享

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

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

相关文章

深入解析Spring Boot项目目录结构:从新手到规范实践

一、标准项目结构全景图 典型的Spring Boot项目&#xff08;Maven构建&#xff09;目录结构如下&#xff1a; my-spring-project/ ├── src/ │ ├── main/ │ │ ├── java/ # 核心代码 │ │ │ └── com/ │ │ │ └── exa…

【C语言】宏经典练习题,交换奇偶位

交换奇偶位 写一个宏&#xff0c;可以将一个整数的二进制位的奇数位和偶数位交换。 #define Swap(x) x(((x&0x55555555)<<1)((x&0xaaaaaaaa)>>1)) int main() {int a 10;Swap(a);printf("%d\n", a);return 0; } 写宏的思路&#xff1a; 假设…

VSCode-插件:codegeex:ai coding assistant / 清华智普 AI 插件

一、官网 https://codegeex.cn/ 二、vscode 安装插件 点击安装即可&#xff0c;无需复杂操作&#xff0c;国内软件&#xff0c;无需科学上网&#xff0c;非常友好 三、智能注释 输入 // 或者 空格---后边自动出现注释信息&#xff0c;&#xff0c;按下 Tab 键&#xff0c;进…

FFmpeg 与 C++ 构建音视频处理全链路实战(三)—— FFmpeg 内存模型

经过前面文章的 FFmpeg 编程实践&#xff0c;相信你已经对AVPacket和AVFrame这两个核心结构体不再陌生。当我们编写代码时&#xff0c;频繁调用unref系列 API 释放内存的操作&#xff0c;或许让你心生疑惑&#xff1a;这些函数究竟是如何实现内存释放的&#xff1f;又该在何时准…

c 中的哈希表

哈希是一种可以接受各种类型、大小的输入&#xff0c;输出一个固定长度整数的过程。你可以将哈希理解成一种特殊的映射&#xff0c;哈希映射&#xff0c;将一个理论无限的集合A映射到有限整数集合B上。 哈希函数&#xff1a;哈希函数是哈希过程的核心&#xff0c;它决定了哈希映…

【一次成功!】Ubuntu22.04安装cartographer

之前在ubuntu20.04上成功安装cartographer&#xff0c;但是翻遍全网都没找到官方的22.04安装教程&#xff0c;然后找到小鱼的&#xff0c;试了一下&#xff0c;一次成功&#xff0c;连接如下&#xff1a; gd2l-ros2/docs/humble/chapt10/get_started/2.Carto介绍及安装.md at …

【WPF】Opacity 属性的使用

在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;Opacity 属性是定义一个元素透明度的属性&#xff0c;其值范围是从 0.0&#xff08;完全透明&#xff09;到 1.0&#xff08;完全不透明&#xff09;。由于 Opacity 是在 UIElement 类中定义的&…

8天Python从入门到精通【itheima】-6~10

目录 7节-开发出第一个Python程序: 1.在cmd窗口写下第一个最简单的程序:Hello World!!! 9节: 1.如何卸载python: 2.报错:不是可运行的程序 ​编辑 3.报错:无法初始化设备PRN: 4.报错:语法错误——非法的字符 10节-python解释器: 1.python解释器的原理: 2.解…

Mac 3大好用的复制粘贴管理工具对比

剪贴板管理器是查看复制粘贴历史记录的工具&#xff0c;几乎是每个苹果电脑用户必备工具。市面上的工具很多&#xff0c;我结合了功能丰富、设计简洁、交互便利整理了目前3款头部剪贴板应用 Paste、PasteNow、PasteMe。 Paste 优势&#xff1a;老牌剪切板应用&#xff0c;功能…

2025年全国青少年信息素养大赛初赛模拟测试网站崩了的原因及应对比赛流程

2025年全国青少年信息素养大赛初赛模拟测试昨天开始&#xff0c;由于同一时间涌入太多的人&#xff0c;导致网站的服务器奔了&#xff0c;出现了各种状况&#xff0c;导致很多人没有模拟上&#xff0c;大家今天可以刷新或者提前打开网页。 有的是一直“转圈圈”&#xff0c;有的…

02 | 大模型微调 | 从0学习到实战微调 | 从数学概率到千亿参数大模型

一、导读 作为非AI专业技术开发者&#xff08;我是小小爬虫开发工程师&#x1f60b;&#xff09; 本系列文章将围绕《大模型微调》进行学习&#xff08;也是我个人学习的笔记&#xff0c;所以会持续更新&#xff09;&#xff0c;最后以上手实操模型微调的目的。 &#xff08;…

十四、继承与组合(Inheritance Composition)

十四、继承与组合&#xff08;Inheritance & Composition&#xff09; 引言 C最引人注目的特性之一是代码复用。组合&#xff1a;在新类中创建已有类的对象。继承&#xff1a;将新类作为已有类的一个类型来创建。 14.1 组合的语法 Useful.h //C14:Useful.h #ifndef US…

2025年5月-信息系统项目管理师高级-软考高项一般计算题

决策树和期望货币值 加权算法 自制和外购分析 沟通渠道 三点估算PERT 当其他条件一样时&#xff0c;npv越大越好

OpenJDK 17 中线程启动的完整流程用C++ 源码详解

1. 线程创建入口&#xff08;JNI 层&#xff09; 当 Java 层调用 Thread.start() 时&#xff0c;JVM 通过 JNI 进入 JVM_StartThread 函数&#xff1a; JVM_ENTRY(void, JVM_StartThread(JNIEnv* env, jobject jthread))// 1. 检查线程状态&#xff0c;防止重复启动if (java_…

Spring MVC参数传递

本内容采用最新SpringBoot3框架版本,视频观看地址:B站视频播放 1. Postman基础 Postman是一个接口测试工具,Postman相当于一个客户端,可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果。 2. Spring MVC相关注解 3. Spring MVC参数传递 Spri…

Python面向对象编程(OOP)深度解析:从封装到继承的多维度实践

引言 面向对象编程(Object-Oriented Programming, OOP)是Python开发中的核心范式&#xff0c;其三大特性——​​封装、继承、多态​​——为构建模块化、可维护的代码提供了坚实基础。本文将通过代码实例与理论结合的方式&#xff0c;系统解析Python OOP的实现机制与高级特性…

0.66kV0.69kV接地电阻柜常规配置单

0.66kV/0.69kV接地电阻柜是变压器中性点接地电阻柜中的特殊存在&#xff0c;主要应用于低压柴油发电机组220V、火力发电厂380V、煤炭企业660V/690V等电力系统或电力用户1000V的低压系统中。 我们来看看0.66kV0.69kV接地电阻柜配置单&#xff1a; 配置特点如下&#xff1a; 1…

矩阵短剧系统:如何用1个后台管理100+小程序?深度解析多端绑定技术

短剧行业效率革命&#xff01;一套系统实现多平台内容分发、数据统管与流量聚合 在短剧行业爆发式增长的今天&#xff0c;内容方和运营者面临两大核心痛点&#xff1a;多平台运营成本高与流量分散难聚合。传统模式下&#xff0c;每个小程序需独立开发后台&#xff0c;导致人力…

CSS可以继承的样式汇总

CSS可以继承的样式汇总 在CSS中&#xff0c;以下是一些常见的可继承样式属性&#xff1a; 字体属性&#xff1a;包括 font-family &#xff08;字体系列&#xff09;、 font-size &#xff08;字体大小&#xff09;、 font-weight &#xff08;字体粗细&#xff09;、 font-sty…

BFS算法篇——打开智慧之门,BFS算法在拓扑排序中的诗意探索(上)

文章目录 引言一、拓扑排序的背景二、BFS算法解决拓扑排序三、应用场景四、代码实现五、代码解释六、总结 引言 在这浩瀚如海的算法世界中&#xff0c;有一扇门&#xff0c;开启后通向了有序的领域。它便是拓扑排序&#xff0c;这个问题的解决方法犹如一场深刻的哲学思考&#…