当前位置:首页 > JavaScript

js实现雨滴

2026-03-14 09:40:10JavaScript

实现雨滴效果的JavaScript代码

以下是一个使用HTML5 Canvas和JavaScript实现雨滴效果的完整示例代码:

// 获取Canvas元素和上下文
const canvas = document.getElementById('rainCanvas');
const ctx = canvas.getContext('2d');

// 设置Canvas尺寸为窗口大小
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

// 雨滴对象数组
const drops = [];

// 雨滴构造函数
function Drop() {
  this.x = Math.random() * canvas.width;
  this.y = Math.random() * canvas.height - canvas.height;
  this.z = Math.random() * 0.5 + 0.5;
  this.len = 10 * this.z;
  this.speed = 5 * this.z;
  this.opacity = Math.random() * 0.6 + 0.2;
}

// 初始化雨滴
for (let i = 0; i < 100; i++) {
  drops.push(new Drop());
}

// 绘制雨滴
function draw() {
  // 半透明背景实现拖尾效果
  ctx.fillStyle = 'rgba(0, 0, 0, 0.05)';
  ctx.fillRect(0, 0, canvas.width, canvas.height);

  // 绘制每个雨滴
  drops.forEach(drop => {
    ctx.beginPath();
    ctx.moveTo(drop.x, drop.y);
    ctx.lineTo(drop.x, drop.y + drop.len);
    ctx.strokeStyle = `rgba(174, 194, 224, ${drop.opacity})`;
    ctx.lineWidth = 1 * drop.z;
    ctx.stroke();

    // 更新雨滴位置
    drop.y += drop.speed;
    drop.x += 0.5 * drop.z; // 轻微倾斜效果

    // 雨滴超出屏幕时重置
    if (drop.y > canvas.height) {
      drop.y = Math.random() * -100;
      drop.x = Math.random() * canvas.width;
    }
  });

  requestAnimationFrame(draw);
}

// 处理窗口大小变化
window.addEventListener('resize', () => {
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;
});

// 开始动画
draw();

HTML结构

<!DOCTYPE html>
<html>
<head>
  <title>雨滴效果</title>
  <style>
    body {
      margin: 0;
      overflow: hidden;
      background: #000;
    }
    canvas {
      display: block;
    }
  </style>
</head>
<body>
  <canvas id="rainCanvas"></canvas>
  <script src="raindrops.js"></script>
</body>
</html>

效果增强选项

  1. 添加溅起效果
    当雨滴到达底部时可以添加小圆圈模拟溅起效果:

    if (drop.y > canvas.height) {
    ctx.beginPath();
    ctx.arc(drop.x, canvas.height, 2 * drop.z, 0, Math.PI * 2);
    ctx.fillStyle = `rgba(174, 194, 224, ${drop.opacity})`;
    ctx.fill();
    drop.y = Math.random() * -100;
    drop.x = Math.random() * canvas.width;
    }
  2. 调整雨滴密度
    修改初始化时的雨滴数量(100)可以控制雨势大小。

  3. 添加闪电效果
    可以随机触发白色闪光模拟闪电:

    
    let lightning = false;

function draw() { if (Math.random() < 0.0005) { lightning = true; setTimeout(() => lightning = false, 100); }

ctx.fillStyle = lightning ? 'rgba(255, 255, 255, 0.9)' : 'rgba(0, 0, 0, 0.05)'; ctx.fillRect(0, 0, canvas.width, canvas.height); // ...其余绘制代码 }

js实现雨滴



4. 性能优化  
对于大量雨滴(>1000),可以考虑使用WebGL或粒子系统库如three.js来提高性能。

标签: 雨滴js
分享给朋友:

相关文章

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…