文字粒子化效果

效果说明

本案例实现了一个文字粒子化的动画效果。将文字转换为由多个彩色粒子组成的形状,粒子会从随机位置移动到文字轮廓上,形成动态的组合效果。

核心实现

1. 粒子系统设计

每个粒子都包含目标位置和当前位置,通过线性插值实现平滑移动:

javascript 复制代码
class Particle {
    constructor(x, y) {
        // 目标位置(文字轮廓上的点)
        this.targetX = x;
        this.targetY = y;
        
        // 当前位置(随机分布在画布上)
        this.currentX = Math.random() * canvas.width;
        this.currentY = Math.random() * canvas.height;
        
        this.speed = 0.05;  // 移动速度
        this.color = `hsl(${Math.random() * 360}, 50%, 50%)`; // 随机颜色
    }
}

2. 文字像素采样

通过获取文字的像素数据来确定粒子位置:

javascript 复制代码
// 绘制文字
ctx.fillText(text, canvas.width / 2, canvas.height / 2);

// 获取像素数据
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const data = imageData.data;

// 根据像素创建粒子
for (let y = 0; y < canvas.height; y += 4) {
    for (let x = 0; x < canvas.width; x += 4) {
        const index = (y * canvas.width + x) * 4;
        const alpha = data[index + 3];  // 获取alpha通道值
        
        if (alpha > 128) {
            particles.push(new Particle(x, y));
        }
    }
}

3. 平滑移动实现

使用线性插值实现粒子的平滑移动:

javascript 复制代码
update() {
    // 新位置 = 当前位置 + (目标位置 - 当前位置) * 速度
    this.currentX += (this.targetX - this.currentX) * this.speed;
    this.currentY += (this.targetY - this.currentY) * this.speed;
}

关键参数说明

  • speed: 粒子移动速度(0-1),值越大移动越快
  • size: 粒子大小
  • 采样间隔(4像素): 控制粒子数量
  • 背景透明度(0.1): 控制拖尾效果

Demo

相关推荐
繁依Fanyi22 分钟前
ImgShrink:摄影暗房里的在线图片压缩工具开发记
开发语言·前端·codebuddy首席试玩官
卓律涤27 分钟前
【找工作系列①】【大四毕业】【复习】巩固JavaScript,了解ES6。
开发语言·前端·javascript·笔记·程序人生·职场和发展·es6
Ten peaches1 小时前
Selenium-Java版(环境安装)
java·前端·selenium·自动化
Enti7c1 小时前
BOM知识点
javascript
心.c1 小时前
vue3大事件项目
前端·javascript·vue.js
姜 萌@cnblogs1 小时前
【实战】深入浅出 Rust 并发:RwLock 与 Mutex 在 Tauri 项目中的实践
前端·ai·rust·tauri
蓝天白云下遛狗2 小时前
google-Chrome常用插件
前端·chrome
多多*2 小时前
Spring之Bean的初始化 Bean的生命周期 全站式解析
java·开发语言·前端·数据库·后端·spring·servlet
linweidong2 小时前
在企业级应用中,你如何构建一个全面的前端测试策略,包括单元测试、集成测试、端到端测试
前端·selenium·单元测试·集成测试·前端面试·mocha·前端面经
满怀10153 小时前
【HTML 全栈进阶】从语义化到现代 Web 开发实战
前端·html