在 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.pswp.cn/bicheng/80883.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80883.shtml
英文地址,請注明出處:http://en.pswp.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;這個問題的解決方法猶如一場深刻的哲學思考&#…