首页 > 其他分享 >使用canvas制作下雨的效果

使用canvas制作下雨的效果

时间:2025-01-12 09:10:55浏览次数:1  
标签:function canvas 下雨 random ctx 雨滴 制作 Math

要使用HTML5的<canvas>元素来制作下雨效果,你需要遵循以下步骤:

  1. 设置HTML结构
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>下雨效果</title>
    <style>
        body { margin: 0; overflow: hidden; }
        canvas { background: #000; display: block; }
    </style>
</head>
<body>
    <canvas id="rainCanvas"></canvas>
    <script src="script.js"></script>
</body>
</html>
  1. 编写JavaScript代码 (script.js 文件):
const canvas = document.getElementById('rainCanvas');
const ctx = canvas.getContext('2d');

let rainDrops = []; // 存储雨滴的数组
const numDrops = 200; // 雨滴数量
const gravity = 0.2; // 重力加速度

// 设置canvas大小
function resize() {
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
}
resize();
window.onresize = resize;

// 雨滴构造函数
function RainDrop() {
    this.x = Math.random() * canvas.width; // 随机x位置
    this.y = Math.random() * canvas.height; // 随机y位置
    this.length = Math.random() * 5 + 1; // 雨滴长度
    this.speed = Math.random() * 5 + 1; // 雨滴下落速度
    this.opacity = Math.random(); // 雨滴透明度
}

// 更新雨滴位置
RainDrop.prototype.update = function() {
    this.y += this.speed + gravity; // 下落,受速度和重力影响
    if (this.y > canvas.height) { // 如果雨滴落出画布,则重置位置
        this.y = 0;
        this.x = Math.random() * canvas.width;
    }
}

// 绘制雨滴
RainDrop.prototype.draw = function() {
    ctx.beginPath();
    ctx.globalAlpha = this.opacity; // 设置透明度
    ctx.moveTo(this.x, this.y);
    ctx.lineTo(this.x + 1, this.y + this.length); // 绘制线条表示雨滴
    ctx.strokeStyle = '#fff'; // 设置雨滴颜色
    ctx.stroke(); // 绘制雨滴
}

// 初始化雨滴
function init() {
    for (let i = 0; i < numDrops; i++) {
        rainDrops.push(new RainDrop());
    }
}
init();

// 动画循环
function animate() {
    ctx.clearRect(0, 0, canvas.width, canvas.height); // 清除画布
    for (let drop of rainDrops) { // 更新和绘制每个雨滴
        drop.update();
        drop.draw();
    }
    requestAnimationFrame(animate); // 循环动画
}
animate();

这段代码首先设置了HTML结构,并链接到一个外部的JavaScript文件。在JavaScript文件中,我们定义了一个RainDrop构造函数来表示每个雨滴,以及相关的更新和绘制方法。我们还设置了一个动画循环来持续更新和绘制雨滴,从而创建下雨的效果。

标签:function,canvas,下雨,random,ctx,雨滴,制作,Math
From: https://www.cnblogs.com/ai888/p/18666560

相关文章

  • 请讲讲websocket心跳机制作用
    WebSocket心跳机制在前端开发中的作用主要体现在以下几个方面:保持连接活跃:WebSocket心跳机制通过定期发送小型数据包(通常不包含有效数据),即心跳包,来检测对方(客户端或服务器)是否仍然在线,并维持连接活跃状态。这种机制有助于防止因长时间无数据传输而导致的连接自动断开,从而确保We......
  • ChatGPT-canvas进行学术写作是怎样的体验?全流程+提示词分享
    目录1.大纲框架✔2.正文✔        在这个信息爆炸的时代,如何高效地将思路转化为一篇条理清晰、内容丰富的文章?今天,让我们一起走进ChatGPT-Canvas的世界,探索它是如何巧妙地将大纲转化为正文内容的。ChatGPT-Canvas不仅仅是一个写作工具,它更像是一位聪明的写作伙伴,能......
  • 30.绝地求生吃鸡游戏网页 Web前端网页制作 大学生期末大作业 html5+css3
    目录一、前言二、网页文件三、网页效果四、代码展示1.HTML2.CSS五、更多推荐一、前言本实例以游戏绝地求生为主题设计,应用html5+css,包括DIV布局、点击事件、超链接、留言板等,供大家参考。【本网页支持如Dreamweaver、HBuilder、Text、Vscode等任意html编辑软件进行......
  • 使用html2canvas生成图片时遇到文字重叠问题
    在使用html2canvas.js插件生成图片时,如果文字中有特殊符合时,生成的图片会出现文字重叠的问题,例如这样。 后面发现是换行时英文特殊标点占位与文字占位不同导致该问题。 解决方法:为特殊字符添加【letter-spacing:1px;】css。如果把全部文字都加letter-spacing:1px;会显得......
  • Calibre(电子书制作及阅读软件)
    Calibre是一款免费的电子书制作及阅读软件,Calibre中文版操作简单,没有太复杂的操作,只需要打开软件就可以使用。Calibre中文版功能强大,在帮助你阅读书籍的同时还可以进行编辑及格式转换,为用户带来高效便捷的使用体验。Calibre中文版源代码开放,拥有跨平台的设计,可在Linux,OSX和W......
  • html css网页制作成品——HTML+CSS+js绝味鸭脖网页设计(5页)附源码
      目录   一、......
  • html+css编程学习网站网页设计与制作5页
    一、......
  • 代码点亮夜空:Python制作炫酷烟花与音效大秀
    谁不喜欢烟花呢?它们在夜空中绽放的瞬间,总是能让人瞬间忘记烦恼,沉浸在那片五光十色的绚烂中。而如果你是一个编程爱好者,那就更不能错过这场“数字烟花”的盛宴!通过Python的Pygame库,我们不仅可以让烟花在电脑屏幕上bigbang,还可以随心所欲地控制它们的颜色、爆炸方式,甚至播......
  • 用Python制作可视化报表,没有比它更快的!
    众所周知,在数据展示中使用图表来分享自己的见解,是个非常常见的方法。这也是Tableau、PowerBI这类商业智能仪表盘持续流行的原因之一,这些工具为数据提供了精美的图形解释。当然了,这些工具也有着不少缺点,比如不够灵活,无法让你自己创建设计。当你对图表展示要求定制化时,编程也......
  • 使用canvas画一个小汽车
    在HTML中使用<canvas>标签和JavaScript来绘制一个小汽车是一个有趣的练习。下面是一个简单的示例,展示了如何使用CanvasAPI来绘制一个基本的小汽车形状。HTML结构:首先,在HTML文件中添加一个<canvas>标签。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">......