CSS文本粒子動畫特效之愛心粒子文字特效-Canvas

1. 效果圖

在這里插入圖片描述

2.完整代碼

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><style>body,html {margin: 0;padding: 0;width: 100%;height: 100%;overflow: hidden;}canvas {display: block;}</style><title>文本粒子動畫</title>
</head><body><canvas id="textCanvas"></canvas><script>const canvas = document.getElementById('textCanvas');const ctx = canvas.getContext('2d');canvas.width = window.innerWidth;canvas.height = window.innerHeight;const particles = [];const fontSize = 100;const text = '果粒橙汁兒up好膩害'; // 這里更改粒子文案ctx.font = `${fontSize}px Arial`;ctx.fillStyle = 'black';ctx.textAlign = 'center';ctx.fillText(text, canvas.width / 2, canvas.height / 2);const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);class Particle {constructor(x, y) {this.type = 'default'; // 定義粒子類型 分'image''default'this.x = x;this.y = y;if (this.type === 'image') {this.size = 10; // 調整粒子大小} else {this.size = 2; // 調整粒子大小}this.baseX = this.x;this.baseY = this.y;this.density = (Math.random() * 30) + 1;this.image = new Image();this.image.src = './heart.jpeg'; // 使用自定義的圖像 路徑寫自己存放圖片的途徑和圖片名字}draw() {if (this.type === 'image') {ctx.drawImage(this.image, this.x - this.size / 2, this.y - this.size / 2, this.size, this.size);} else {// 繪制其他類型的粒子ctx.fillStyle = 'black'; // 這里更改粒子顏色// ctx.fillStyle = `rgba(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255}`; // 隨機彩色粒子ctx.beginPath();ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);ctx.closePath();ctx.fill();}}update() {let dx = mouse.x - this.x;let dy = mouse.y - this.y;let distance = Math.sqrt(dx * dx + dy * dy);let forceDirectionX = dx / distance;let forceDirectionY = dy / distance;let maxDistance = mouse.radius;let force = (maxDistance - distance) / maxDistance;let directionX = forceDirectionX * force * this.density;let directionY = forceDirectionY * force * this.density;if (distance < mouse.radius) {this.x -= directionX;this.y -= directionY;} else {if (this.x !== this.baseX) {let dx = this.x - this.baseX;this.x -= dx / 5;}if (this.y !== this.baseY) {let dy = this.y - this.baseY;this.y -= dy / 5;}}}}let mouse = {x: null,y: null,radius: 150};window.addEventListener('mousemove', function (event) {mouse.x = event.x;mouse.y = event.y;});function init() {for (let y = 0, y2 = imageData.height; y < y2; y += 4) {for (let x = 0, x2 = imageData.width; x < x2; x += 4) {if (imageData.data[(y * 4 * imageData.width) + (x * 4) + 3] > 128) {let positionX = x;let positionY = y;particles.push(new Particle(positionX, positionY));}}}}function animate() {requestAnimationFrame(animate);ctx.clearRect(0, 0, canvas.width, canvas.height);for (let i = 0; i < particles.length; i++) {particles[i].draw();particles[i].update();}}init();animate();</script>
</body></html>

代碼出來的效果是黑色的,如果想要示例圖那種愛心粒子,可以將type改成image,并且改變圖片路徑this.image.src,如果想要改變文案則改變text變量,如果要改變粒子顏色則改變ctx.fillStyle即可~
本案例使用的圖片素材放在文章里啦,自取

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17694.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17694.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17694.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

order by工作過程和優化

工作過程 order by 是由優化器決定的&#xff0c;如果優化器認為filesort速度快&#xff0c;那么走filesort排序&#xff0c;如果優化器認為索引速度快&#xff0c;那么走索引排序。

有一個3x4的矩陣,求矩陣中所有元素中的最大值。要求用函數處理

解此題的算法已在之前的文章中介紹&#xff0c;詳見&#xff1a;https://mp.csdn.net/mp_blog/creation/editor/139181787 編寫程序&#xff1a; 運行結果&#xff1a;

常用的字符串方法

length() 返回字符串的長度。 let str "HelloWorld"; console.log(str.length); // 10charAt() 返回指定位置的字符。參數&#xff1a;位置索引。 let str "HelloWorld"; console.log(str.charAt(5)); // Wconcat() 連接字符串。參數&#xff1a;一…

昵稱生成器

package mainimport ("math/rand" )// 隨機昵稱 形容詞 var nicheng_tou []string{"迷你的", "鮮艷的", "飛快的", "真實的", "清新的", "幸福的", "可耐的", "快樂的", "冷…

卷徑計算(PID輸出補償法 SCL源代碼)

卷徑計算有很多方法,這里我們提供另一個思路,這里我們采用的是通過速度控制間接控制張力通過線速度和系統卷徑我們可以計算出我們的速度前饋量(主速度)。具體收放卷前饋量計算可以參考下面文章鏈接: 收放卷前饋量計算FC(梯形圖+SCL代碼)-CSDN博客文章瀏覽閱讀584次。這篇博…

【數據分析面試】55. 尋找雙詞組 (Python)

題目&#xff1a; 尋找雙詞組 &#xff08;Python&#xff09; 編寫一個名為 find_bigrams 的函數&#xff0c;該函數接收一個句子或段落的字符串&#xff0c;并按順序返回其所有雙詞組的列表。 注意&#xff1a; 雙詞組是指連續的兩個單詞。 示例&#xff1a; 輸入&#x…

JavaScript(ES6)入門

ES6 1、介紹 ECMAScript 6&#xff08;簡稱ES6&#xff09;是于2015年6月正式發布的JavaScript 語言的標準&#xff0c;正式名為ECMAScript 2015&#xff08;ES2015&#xff09;。它的目標是使得JavaScript語言可以用來編寫復雜的大型應用程序&#xff0c;成為企業級開發語言。…

Dolphinscheduler不重啟加載Oracle驅動

轉載自劉茫茫看山 問題背景 某天我們的租戶反饋數據庫連接缺少必要的驅動&#xff0c;我們通過日志查看確實是缺少部分數據庫的驅動&#xff0c;因為DolphinScheduler默認只帶了Oracle和MySQL的驅動&#xff0c;并且需要將pom文件中的test模式去掉才可以在打包的時候引入。我…

Unity Dotween 定位點的制作

目錄 前言 一、動畫預覽 二、動畫拆分 三、素材準備 四、曲線 OutCirc詳解 五、速度分類詳解 六、代碼 七、組件和設置 八、作者的話 前言 我答應我的粉絲接下來更新Dotween系列&#xff0c;但是我一直沒想好&#xff0c;從哪里開始講。 Dotween的安裝我就跳過了&…

QtCreator調試運行工程報錯,無法找到相關庫的的解決方案

最新在使用國產化平臺做qt應用開發時&#xff0c;總是遇到qtcreator內調試運行 找不到動態庫的問題&#xff0c;為什么會出現這種問題呢&#xff1f;明明編譯的時候能夠正常通過&#xff0c;運行或者調試的時候找不到相關的庫呢&#xff1f;先說結論&#xff0c;排除庫本身的問…

Flutter 中的 AnimatedList 小部件:全面指南

Flutter 中的 AnimatedList 小部件&#xff1a;全面指南 在Flutter中&#xff0c;AnimatedList是一個專門用于展示和管理一個有序列表的組件&#xff0c;它可以對列表中的項進行添加、移除和重新排序操作&#xff0c;并且這些操作都伴隨著動畫效果。這使得AnimatedList非常適合…

精釀啤酒:品質與口感在消費者選擇中的權重分析

在啤酒市場中&#xff0c;消費者選擇的影響因素眾多&#xff0c;其中品質與口感是兩個核心要素。對于Fendi club啤酒而言&#xff0c;品質與口感的權重分析在消費者選擇中顯得尤為重要。 品質是消費者選擇啤酒的首要因素。隨著消費者對啤酒認知的提高&#xff0c;他們對品質的…

德邦快遞和德邦物流運費標準哪個更劃算?怎樣才能便宜的寄大件快遞?

在寄大件包裹快遞時&#xff0c;我們一般都知道選擇德邦&#xff0c;那么德邦快遞和德邦物流的收費標準哪個更劃算呢&#xff1f;下面&#xff0c;讓我們一起來了解德邦快遞和德邦物流的收費標準&#xff0c;以及如何根據實際情況做出最佳選擇。 首先了解快遞費用構成 快遞費用…

Prometheus Operator創建告警規則并接入釘釘報警

prometheus之釘釘報警 前言1. 添加prometheus報警規則1.2 添加自定義報警規則文件 2. 配置釘釘報警2.2 部署dingding插件 3. 編寫alertmanager配置文件 前言 在kubenetes上安裝了kube-promethues&#xff08;包含Prometheus Operator&#xff09;,程序正常跑起來了&#xff0c…

IC開發——verdi基本用法

1. 基礎知識 1.1. verdi VCS和Verdi這兩個工具&#xff0c;這兩個工具目前都屬于synopsys公司。VCS主要負責編譯運行Testbench和RTL&#xff0c;并負責生成相應的波形文件。而verdi主要負責加載波形文件&#xff0c;查看信號的波形及其對應的代碼來進行調試驗證。Verdi最開始…

dimp導入提示 [警告]該工具不能解析此文件,請使用更高版本的工具

問題描述&#xff1a;dimp導入報錯 [dmdbalocalhost ~]$ dimp SYSDBA/Topnet_123\192.168.3.27:5241 FILEimp_exp.dmp LOGreport_ty_imp_20240528.log DIRECTORY/opt/dmdba LOG_WRITEY REMAP_SCHEMAreport:report_ty dimp V8[警告]文件"/opt/dmdba/report_ty_imp_2024052…

Linux 查找命令的操作,學完效率瞬間翻倍?

可以很肯定地說&#xff0c;find 命令是 Linux 運維必須熟知的操作之一。 讓我們看一道題&#xff1a; 如果你的 Linux 服務器上有一個名為 .logs 的目錄&#xff0c;如何刪除該目錄下最后一次訪問時間超過一年的日志文件呢&#xff1f; 這種情況很常見&#xff0c;但令人驚訝…

簡述nextTick 的作用是什么?他的實現原理是什么 ?

nextTick 的作用 在 Vue.js 中&#xff0c;nextTick 是一個非常有用的函數&#xff0c;它用于延遲執行一段代碼&#xff0c;直到下一次 DOM 更新循環結束之后。換句話說&#xff0c;當你修改了數據之后&#xff0c;視圖不會立即更新&#xff0c;而是等到下一次“DOM 更新循環”…

【Linux系統】進程間通信

本篇博客整理了進程間通信的方式管道、 system V IPC的原理&#xff0c;結合大量的系統調用接口&#xff0c;和代碼示例&#xff0c;旨在讓讀者透過進程間通信去體會操作系統的設計思想和管理手段。 目錄 一、進程間通信 二、管道 1.匿名管道 1.1-通信原理 1.2-系統調用 …

簡談SUID提權

SUID提權 0x01什么是SUID ? SUID (Set UID)是Linux中的一種特殊權限,其功能為用戶運行某個程序時&#xff0c;如果該程序有SUID權限&#xff0c;那么程序運行為進程時&#xff0c;進程的屬主不是發起者&#xff0c;而是程序文件所屬的屬主。但是SUID權限的設置只針對二進制可…