创建一个火焰跟随鼠标的动画涉及到多个步骤,包括创建canvas元素,监听鼠标事件,以及在canvas上绘制火焰。以下是一个基本的实现方式:
首先,在HTML中添加一个canvas
元素:
<!DOCTYPE html>
<html>
<head>
<title>火焰跟随鼠标动画</title>
<style>
body { margin: 0; }
canvas { background: #000; display: block; }
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<script src="script.js"></script>
</body>
</html>
然后,在script.js
文件中添加以下JavaScript代码:
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
// 设置canvas大小
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
let flame = {
x: canvas.width / 2,
y: canvas.height / 2,
size: 50,
vx: 0,
vy: 0,
color1: 'orange',
color2: 'red',
};
function drawFlame(flame) {
let gradient = ctx.createRadialGradient(flame.x, flame.y, 0, flame.x, flame.y, flame.size);
gradient.addColorStop(0, flame.color1);
gradient.addColorStop(1, flame.color2);
ctx.beginPath();
ctx.arc(flame.x, flame.y, flame.size, 0, Math.PI * 2, false);
ctx.fillStyle = gradient;
ctx.fill();
}
function clearCanvas() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
}
function animate() {
clearCanvas();
drawFlame(flame);
requestAnimationFrame(animate);
}
function updateMousePos(e) {
flame.vx = (e.clientX - flame.x) * 0.1;
flame.vy = (e.clientY - flame.y) * 0.1;
}
function update() {
flame.x += flame.vx;
flame.y += flame.vy;
flame.vx *= 0.95;
flame.vy *= 0.95;
}
canvas.addEventListener('mousemove', updateMousePos);
animate();
setInterval(update, 16); // 更新频率可以根据需要调整
这段代码首先设置了一个flame
对象,表示火焰,包含其位置、大小、速度和颜色等信息。drawFlame
函数用于在canvas上绘制火焰,clearCanvas
函数用于清除canvas。animate
函数用于持续绘制火焰,updateMousePos
函数根据鼠标位置更新火焰的速度,update
函数根据速度更新火焰的位置,并稍微减小速度以模拟阻力效果。最后,通过setInterval
定期更新火焰位置。