详细的粒子爱心跳动代码
时间: 2024-09-26 09:00:23 浏览: 49
粒子爱心跳动效果通常是在动画或游戏开发中创建视觉吸引力的一种常见技术,它涉及到粒子系统的使用以及基本的数学和时间驱动的更新。下面是一个简单的JavaScript粒子系统实现爱心跳动示例:
```javascript
// 创建粒子系统
var particles = [];
for (var i = 0; i < 50; i++) {
var particle = {
x: Math.random() * window.innerWidth,
y: Math.random() * window.innerHeight,
size: 5 + Math.random() * 10,
color: 'hsl(' + Math.random() * 360 + ', 100%, 50%)',
speedX: Math.random() - 0.5,
speedY: Math.random() - 0.5,
heartbeatTimer: null
};
particles.push(particle);
}
function animate() {
// 清除上一帧的心跳计时器
for (var j = 0; j < particles.length; j++) {
if (particles[j].heartbeatTimer) {
clearTimeout(particles[j].heartbeatTimer);
}
}
// 更新每个粒子的位置,并处理心跳效果
for (var k = 0; k < particles.length; k++) {
particles[k].x += particles[k].speedX;
particles[k].y += particles[k].speedY;
// 每隔一段时间模拟一次心跳
if (!particles[k].heartbeatTimer && Math.random() < 0.05) {
particles[k].heartbeatTimer = setTimeout(function(index) {
this.size *= 1.1;
if (this.size > 20) {
this.size = 5;
}
this.speedY *= -0.8;
this.heartbeatTimer = null;
}.bind(particles[k]), 700); // 心跳间隔大约每秒半次
}
}
// 绘制粒子
for (var l = 0; l < particles.length; l++) {
ctx.beginPath();
ctx.arc(particles[l].x, particles[l].y, particles[l].size, 0, Math.PI*2);
ctx.fillStyle = particles[l].color;
ctx.fill();
}
requestAnimationFrame(animate);
}
// 初始化 canvas 和 context
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
requestAnimationFrame(animate);
```
这个代码会创建50个随机位置、大小和颜色的粒子。每隔一段时间,一些粒子会放大并向下移动,模拟心脏跳动的效果。`requestAnimationFrame`用于流畅地更新动画。
阅读全文