文字粒子化效果

效果说明

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

核心实现

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

相关推荐
wycode2 分钟前
# 面试复盘(2)--某硬件大厂前端
前端·面试
怪可爱的地球人4 分钟前
ts枚举(enum)
前端
做你的猫6 分钟前
深入剖析:基于Vue 3与Three.js的3D知识图谱实现与优化
前端·javascript·vue.js
渊不语11 分钟前
富文本编辑器自定义图片等工具栏-完整开发文档
前端
用户239712822487011 分钟前
taro+vue3+vite项目 tailwind 踩坑记,附修复后的模板源码地址
前端
做你的猫15 分钟前
深入剖析:基于Vue 3的高性能AI聊天组件设计与实现
前端·javascript·vue.js
G佳伟17 分钟前
vue拖动排序,vue使用 HTML5 的draggable拖放 API实现内容拖并排序,并更新数组数据
前端·vue.js·html5
Bling_Bling_122 分钟前
ES6新语法特性(第二篇)
开发语言·前端·es6
石小石Orz34 分钟前
妙啊!Js的对象属性居然还能用这么写
前端
成熟的API调用专家40 分钟前
cesium 获取鼠标点击位置的经度纬度海拔高度
前端