HTML5 Canvas结合JavaScript可实现雨滴下落动画:先初始化Canvas并获取2D上下文;再定义含位置、速度等属性的雨滴对象数组;接着逐帧更新雨滴坐标并重置越界雨滴;然后用requestAnimationFrame循环绘制;最后通过mousemove事件调节雨势强度。

如果您希望在网页中实现雨滴下落的动态效果,HTML5 Canvas 提供了直接绘制和逐帧控制的能力,结合 JavaScript 可以精确操控雨滴的位置、速度、透明度与生命周期。以下是实现该效果的具体步骤:
一、初始化Canvas并获取绘图上下文
首先需要在HTML中创建一个元素,并通过JavaScript获取其2D绘图上下文,这是所有后续绘制操作的基础。
1、在HTML中添加标签。
2、使用document.getElementById("rainCanvas")获取Canvas DOM对象。
立即学习“前端免费学习笔记(深入)”;
3、调用getContext("2d")方法获取2D渲染上下文,并赋值给变量ctx。
二、定义雨滴数据结构与初始化雨滴数组
每个雨滴需独立记录位置、速度、长度、透明度及生存状态,便于统一更新与绘制。初始化时批量生成一定数量的随机雨滴对象。
1、声明空数组raindrops = []用于存储雨滴对象。
2、使用for循环执行50次,每次生成一个对象,包含x(随机横坐标)、y(随机负起始纵坐标,使雨滴从画布上方进入)、speed(1.5–4之间的随机值)、length(5–15之间的随机整数)、opacity(0.4–1.0之间的随机值)。
3、将每个对象推入raindrops数组。
三、编写雨滴更新逻辑
每一帧需更新所有雨滴的纵坐标,使其向下移动;当雨滴移出画布底部时,重置其位置至顶部,模拟持续降雨效果。
1、遍历raindrops数组,对每个雨滴对象执行y += speed。
2、判断y > canvas.height + length,若成立,则将该雨滴的y重置为Math.random() * -100,x重置为Math.random() * canvas.width。
3、可选:为增强真实感,对speed或length加入微小随机扰动,避免完全规律下落。
四、实现Canvas逐帧绘制
利用requestAnimationFrame驱动循环,在每一帧中先清空画布,再按当前状态绘制全部雨滴,形成连贯动画。
1、定义绘制函数draw(),内部调用ctx.clearRect(0, 0, canvas.width, canvas.height)清除上一帧。
2、遍历raindrops,对每个雨滴调用ctx.beginPath(),使用ctx.moveTo(x, y)和ctx.lineTo(x + 2, y + length)绘制斜线模拟雨丝。
3、设置ctx.strokeStyle = `rgba(180, 220, 255, ${opacity})`,并调用ctx.stroke()完成单条雨滴渲染。
4、在draw()末尾调用requestAnimationFrame(draw)启动循环。
五、添加鼠标交互控制雨势强度
通过监听mousemove事件,根据鼠标X坐标映射到雨滴密度或下落速度范围,实现实时调节效果。
1、绑定canvas.addEventListener("mousemove", handleMouseMove)。
2、在handleMouseMove中,计算const intensity = (event.clientX / window.innerWidth) * 0.8 + 0.2,确保取值在0.2–1.0之间。
3、将intensity应用于雨滴的speed倍率或每帧新增雨滴概率,例如:更新时使用y += speed * intensity。
4、注意:需在雨滴初始化和更新逻辑中统一接入该系数,否则交互无效。










