HTML5+Canvas实现的鼠标跟随自定
我们希望通过HTML5 Canvas来创建一个当鼠标移动时,Canvas上的某个元素(比如一个圆圈、线条或图片)能够跟随鼠标移动的特效。
<canvas id="myCanvas" width="400" height="300"></canvas>
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
// 获取canvas的宽度和高度
const canvasWidth = canvas.width;
const canvasHeight = canvas.height;
// 创建一个圆圈对象
let circle = {
x: canvasWidth / 2,
y: canvasHeight / 2,
radius: 20
};
// 鼠标移动事件监听
canvas.addEventListener('mousemove', (event) => {
// 获取鼠标相对于canvas的坐标
circle.x = event.clientX - canvas.offsetLeft;
circle.y = event.clientY - canvas.offsetTop;
// 清空画布
ctx.clearRect(0, 0, canvasWidth, canvasHeight);
// 绘制圆圈
ctx.beginPath();
ctx.arc(circle.x, circle.y, circle.radius, 0, Math.PI * 2);
ctx.fillStyle = 'red';
ctx.fill();
});
getElementById
获取Canvas元素,并使用getContext('2d')
获取2D渲染上下文。mousemove
事件监听器,当鼠标在canvas上移动时触发。beginPath
、arc
、fillStyle
和fill
方法绘制圆圈。fillStyle
属性来改变形状的颜色。requestAnimationFrame
实现更流畅的动画效果。
// 创建多个粒子
const particles = [];
for (let i = 0; i < 100; i++) {
particles.push({
x: Math.random() * canvasWidth,
y: Math.random() * canvasHeight,
radius: Math.random() * 5
});
}
// 在绘制圆圈之前,遍历粒子数组,更新每个粒子的位置并绘制
particles.forEach(particle => {
// ... 更新粒子位置的逻辑
ctx.beginPath();
ctx.arc(particle.x, particle.y, particle.radius, 0, Math.PI * 2);
ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';
ctx.fill();
});
通过以上的代码和思路,你可以实现各种各样的鼠标跟随特效。Canvas提供了一个强大的画布,可以让你尽情发挥创意。
想了解更多,可以深入研究以下主题:
如果你有更具体的问题,欢迎随时提问!