更新记录
1.1.5(2023-06-22) 下载此版本
- 修复已知bug
- gravity单词拼写错误修改
- demo兼容微信小程序canvas 2d
1.1.4(2023-04-01) 下载此版本
起步太麻烦?交给我
- 新增 Confetti 类,即new即用,无需其他新的对象,快餐式使用,动画结束就销毁对象。
1.1.2(2023-03-20) 下载此版本
· 修复uniapp-h5端传入原生Context2d时报错 draw bug · 请在使用前 npm i confetti-ts-canvas 安装最新版
查看更多平台兼容性
uni-app
Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
---|---|---|---|---|---|---|---|---|
√ | √ | √ | √ | √ | - | - | - | - |
微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
---|---|---|---|---|---|---|---|---|---|---|
√ | - | - | - | - | - | - | - | - | - | - |
其他
多语言 | 暗黑模式 | 宽屏模式 |
---|---|---|
× | × | √ |
:zap:Confetti-ts-canvas
canvas中奖庆祝礼花喷发/五彩纸屑/🎉/特效
请在运行Demo之前 npm i confetti-ts-canvas 安装该库
特性
- 1.基于canvas 2d,无依赖任何第三方插件,安装简单。
- 2.基于typescript开发,支持es6和amd与ts。
- 3.本质就是一个jssdk支持各大浏览器H5 PC与M端,uniapp,微信小程序,uniapp app等,只要是js或者ts都支持。
- 4.使用简单,支持自定义形状,效果显著,动画流畅60帧
效果图

如果有帮到您,给个小星星,我会把它做得更好。 https://github.com/AK1118/Confetti-js-canvas/
cdn引入
<script src="https://cdn.jsdelivr.net/npm/confetti-ts-canvas@1.1.4/dist/index.esm.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/confetti-ts-canvas@1.1.4/dist/index.amd.min.js"></script>
- 2选1,建议使用npm安装
npm安装
npm i confetti-ts-canvas
快速使用方式,来一次快餐式的体验
import {
Confetti
} from 'confetti-ts-canvas';
//确保已经存在canvas标签在页面内
const canvas= document.querySelector("canvas");
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
const g= canvas.getContext("2d");
new Confetti({
paint:g,
canvasWidth:canvas.width,
canvasHeight:canvas.height,
}).run();
更多使用方法,引入
import {
ConfettiEjector,
CanvasRender,
CustomShape
} from 'confetti-ts-canvas';
初始化
const g=uni.createCanvasContext("myCanvas");
const canvasRender=new CanvasRender();
canvasRender.init(
//必填 CanvasContext
g,
//可选填入
{
width:canvas.width,
height:canvas.height,
},
//以下参数全部可选填入
{
onFinished(){
console.log("完成")
},
displayFps:true,
grivaty:.5,
}
);
使用
const pao = new ConfettiEjector(canvasRender, {
limitAngle: [225, 315],//喷发角度区间[-∞,+∞]
count: 100,//喷发纸片数量
});
const boom = pao.create({
x: Math.random()*(this.canvasSize.width*.5),
y:Math.random()*(this.canvasSize.height*.5),//喷发位置
clampforce: [20, 60],//喷发力度
radius: 10,//纸片大小
});
pao.fire(boom);
可能会遇到的问题
- demo短时间内点击多个按钮闪屏。每个按钮的CanvasRender实例不同,但调用的是同一个canvas,所以会出现闪屏。不无担心,业务上不会在短时间内调用多个CanvasRender,如果有,销毁上一个动画再调用也可。
- 详细使用方法请参考demo:https://ext.dcloud.net.cn/plugin?id=10530