首页 > 其他分享 >使用canvas制作一个淋浴喷头的动画

使用canvas制作一个淋浴喷头的动画

时间:2024-12-28 09:34:09浏览次数:2  
标签:canvas const 水滴 ctx 喷头 淋浴

要制作一个淋浴喷头的动画,我们可以使用HTML的<canvas>元素结合JavaScript。以下是一个简单的示例,展示了如何创建一个淋浴喷头并使其喷水:

  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>
        canvas {
            border: 1px solid black;
            background-color: #f4f4f4;
        }
    </style>
</head>
<body>
    <canvas id="showerCanvas" width="800" height="600"></canvas>
    <script src="script.js"></script>
</body>
</html>
  1. JavaScript代码 (script.js):
const canvas = document.getElementById('showerCanvas');
const ctx = canvas.getContext('2d');
const showerHeadRadius = 20;
const showerHeadX = canvas.width / 2;
const showerHeadY = 50;
const droplets = [];
const maxDroplets = 200;
const gravity = 0.5;
const dropletSpeedVariation = 100;

class Droplet {
    constructor() {
        this.x = showerHeadX;
        this.y = showerHeadY;
        this.size = Math.random() * 5 + 2;
        this.speedY = Math.random() * dropletSpeedVariation - dropletSpeedVariation / 2 + 3;
        this.alpha = Math.random();
    }

    update() {
        this.y += this.speedY;
        this.speedY += gravity;
        this.alpha -= 0.005;
    }

    draw() {
        ctx.globalAlpha = this.alpha;
        ctx.beginPath();
        ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
        ctx.closePath();
        ctx.fillStyle = 'blue';
        ctx.fill();
        ctx.globalAlpha = 1;
    }
}

function createDroplets() {
    if (droplets.length < maxDroplets) {
        droplets.push(new Droplet());
    }
}

function animate() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.beginPath();
    ctx.arc(showerHeadX, showerHeadY, showerHeadRadius, 0, Math.PI * 2);
    ctx.closePath();
    ctx.fillStyle = 'gray';
    ctx.fill();
    droplets.forEach((droplet, index) => {
        droplet.update();
        droplet.draw();
        if (droplet.y > canvas.height) {
            droplets.splice(index, 1);
        }
    });
    createDroplets();
    requestAnimationFrame(animate);
}

animate();

这段代码首先定义了一个淋浴喷头的位置和大小,然后创建了一个Droplet类来表示从喷头喷出的水滴。每个水滴都有自己的位置、大小、速度和透明度。在animate函数中,我们不断地清除画布,重新绘制喷头和所有水滴,并更新水滴的位置和速度。当水滴落到画布底部时,我们会将其从水滴数组中移除,并创建新的水滴以保持屏幕上的水滴数量。

标签:canvas,const,水滴,ctx,喷头,淋浴
From: https://www.cnblogs.com/ai888/p/18637116

相关文章

  • 使用canvas实现一个麦克风
    在前端开发中,使用HTML5的<canvas>元素来实现一个麦克风图形是一个有趣且富有挑战性的任务。下面是一个简单的步骤指南,以及一个示例代码,帮助你开始:步骤指南创建Canvas元素:在HTML中添加一个<canvas>标签。设置合适的宽度和高度。获取Canvas上下文:使用JavaScript获取can......
  • 使用canvas制作一个水龙头出水的动画
    创建一个水龙头出水的动画在前端开发中可以通过HTML的<canvas>元素配合JavaScript来完成。以下是一个简单的示例,展示了如何制作一个基本的水龙头出水动画:HTML结构:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"cont......
  • 使用canvas画一条金鱼
    在前端开发中,使用HTML5的<canvas>元素绘制图形是一个常见的任务。下面是一个简单的示例,展示如何使用<canvas>和JavaScript来绘制一条金鱼:HTML结构:首先,在HTML文件中添加一个<canvas>元素。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8&quo......
  • 使用canvas画一个机器人(任意想象)
    在前端开发中,使用HTML5的<canvas>元素画一个机器人需要一些基本的绘图知识和对CanvasAPI的理解。以下是一个简单的示例,展示如何使用CanvasAPI来画一个基本的机器人形象:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"......
  • 使用canvas制作一个加载的动画
    在前端开发中,使用HTML5的<canvas>元素可以创建丰富的图形和动画。下面是一个简单的示例,展示如何使用<canvas>制作一个加载动画。首先,在HTML文件中添加一个<canvas>元素:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="vi......
  • HTML画布canvas绘制图形,解决拖影问题
     在使用HTMl画面canvas绘制矩形,圆等图形时,总是出现拖影。解决这个问题有很多中方法:方法一:鼠标移动过程中中不画上去,在释放鼠标的时候绘制上去,这样就看不到拖影,但是看不到绘制过程方法二:在鼠标移动的时候,清除上一次绘制的矩形,然后在画,这样就没有拖影了,但是计算起来麻烦,要多......
  • Canvas实现渐变圆环并下载为图片
    因为地图上要展示一个渐变圆圆环的图标,找了很久没有找到现成满意的,于是就干脆自己使用Canvas画一个,颜色透明度什么的都额可以自己调整,Nice。其实模糊的圆环原理也很简单,就是绘制多个圆形,透明度设置不同就行了。然后页面上添加一个按钮,并通过点击该按钮将Canvas上的图形......
  • canvas入门-五子棋
    <scriptlang="ts"setup>import{nextTick,onMounted,ref}from'vue';//contrantsconstBORDER_LINES_NUM_FIFTEEN=15;constBORDER_PADDING_TWENTY=20;constBORDER_GRID_LENGTH_FORTY=40;constBORDER_LENGTH=600-BORDER......
  • 旧版 Canvas 迁移指南
    旧版Canvas迁移指南小程序的旧版canvas接口已经不再维护,本指南将指引如何迁移至新版Canvas2D接口。特性差异旧版canvas接口Canvas2D接口同层渲染不支持支持api支持部分支持支持全部Web标准绘制异步绘制同步绘制性能低高迁移步骤......
  • Canvas 画布
    Canvas画布canvas组件提供了绘制界面,可以在之上进行任意绘制基础使用第一步:在WXML中添加canvas组件<!--2d类型的canvas--><canvasid="myCanvas"type="2d"style="border:1pxsolid;width:300px;height:150px;"/>首先需要在WXML中添加canvas组件。......