更新记录

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 安装最新版

查看更多

平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
app-vue × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× ×

: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帧

效果图

Github stars 如果有帮到您,给个小星星,我会把它做得更好。 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

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问