字符雨canvas

news2024/12/27 11:12:03

整体思路:

  1. 确定好字符雨的具体字符是什么,需要多少行多少列这里是写死的其实也可以用循环加随机的方式生成不一样的字符雨,行列也可以读一下宽度然后做一下出发算一下也行
  2. 首先得有一张画布搞起,然后循环列数去绘画字符
  3. 定时器循环调取回话方法
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>字符雨</title>
</head>
<style>
    *{
        margin:0;
        padding: 0;
        box-sizing: border-box;
        height: 100%;
    }
    #char-rain {
        display: flex;
        width: 100%;
        height: 100%;
        overflow: hidden;
    }
</style>

<body>
    <canvas id="char-rain"></canvas>
    <script>
        // 获取canvas元素
        var canvas = document.getElementById('char-rain');
        // 获取画布上下文
        var ctx = canvas.getContext('2d');
        // 定义字符集
        var chars = 'abcdefghijklmnopqrstuvwxyz1234567890';
        // 定义字符雨的列数和行数
        var columns = 800;
        var rows = 500;
        // 定义每个字符的宽度和高度
        var charWidth = 5;
        var charHeight = 5;
        // 定义字符雨的速度
        var speed = 30;
        // 定义一个数组,用于存储每一列的字符
        var drops = [];
        // 初始化每一列的字符
        for (var i = 0; i < columns; i++) {
            drops[i] = Math.floor(Math.random() * rows);
        }
        // 绘制字符雨
        function draw() {
            // 设置画布背景色
            ctx.fillStyle = 'rgba(0, 0, 0, 0.1)';
            ctx.fillRect(0, 0, canvas.width, canvas.height);
            // 设置字体样式
            ctx.font = charWidth + 'px monospace';
            ctx.fillStyle = '#0f0';
            // 绘制每一列的字符
            for (var i = 0; i < columns; i++) {
                // 随机选择一个字符
                var char = chars[Math.floor(Math.random() * chars.length)];
                // 绘制字符
                ctx.fillText(char, i * charWidth, drops[i] * charHeight);
                // 如果字符已经到达底部,则重新从顶部开始
                if (drops[i] * charHeight > canvas.height && Math.random() > 0.975) {
                    drops[i] = 0;
                }
                // 增加字符的下落速度
                drops[i]++;
            }
        }
        // 每隔一段时间调用一次绘制函数,实现动画效果
        setInterval(draw, speed);
    </script>
</body>
</html>

复习点

一、canvas

提供了一个通过JavaScript 和 HTML的<canvas>元素来绘制图形的方式。
它可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。

HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.
<canvas> 标签只是图形容器,但是必须使用脚本来绘制图形。

使用:
html部分

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;"></canvas>
  • 本身具有宽高属性直接设置就好,单位默认px
  • 也可以通过 id 或者 class类名 或者 内敛样式 直接去定义宽高都可以的
  • 不设置的话默认宽300px高150px
  • 通常用 id ,在后续脚本编写时会经常用到

JavaScript部分
canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成:

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);
  • 通常先通过id获取到dom元素
  • dom.getContext("2d")创建context上下文对象,大部分脚本行为都是围绕这个context对象展开的
这个代码里面用到的
  • fillStyle属性:填充绘画颜色、渐变或模式。这里拿它做背景用了
  • fillRect方法:绘制被填充的矩形。这里是用它确定好画布大小。

需要知道的是fillRect这个方法有四个参数(x,y,width,height)分别是矩形开始的x,y轴坐标以及矩形宽高
默认的填充颜色是黑色

  • font属性:文本内容的字体属性。这个代码里面字符的字体属性
  • fillText方法:在画布上绘制被填充的文本。这里就是把字符写上去。

需要知道的是fillText这个方法有四个参数(text,x,y,maxWidth)分别是填充文本,该文本相对于画布的x,y轴坐标以及允许的最大文本宽度
最后一个参数maxWidth选填

关于 上下文对象的属性和方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、setInterval

我们通常称之为计时器同样被称之为计时器的还有setTimeout
他们的不同点在于调取次数,setInterval循环无限次调用直到页面关闭或者clearInterval()清除;而setTimeout是只会调用一次。

1、定义
  • 可按照指定的周期(以毫秒计)来调用函数或计算表达式。

setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。
由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。

2、语法及参数
setInterval(code, milliseconds);
setInterval(function, milliseconds, param1, param2, ...)
  • code/function 必需。要调用一个代码串,也可以是一个函数。
  • milliseconds 必须。周期性执行或调用code/function之间的时间间隔,以毫秒计。
  • param1, param2, ... 可选。 传给执行函数的其他参数(IE9 及其更早版本不支持该参数)。
3、返回值
  • 返回一个 ID(数字),可以将这个ID传递给clearInterval()clearTimeout() 以取消执行。

参考:
1、菜鸟关于canvas
2、canvas的MDN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1310558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL语句的执行顺序怎么理解?

SQL语句的执行顺序怎么理解&#xff1f; 我们常常会被SQL其书写顺序和执行顺序之间的差异所迷惑。理解这两者的区别&#xff0c;对于编写高效、可靠的SQL代码至关重要。今天&#xff0c;让我们用一些生动的例子和场景来深入探讨SQL的执行顺序。 一、书写顺序 VS 执行顺序 SQ…

数据结构和算法(全)

1.了解数据结构和算法 1.1 二分查找 二分查找&#xff08;Binary Search&#xff09;是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分成两半&#xff0c;然后比较目标值与中间元素的大小关系&#xff0c;从而确定应该在左半部分还是右半部分继续查找。这个…

后台业务管理系统原型模板,Axure后台组件库(整套后台管理页面)

后台业务系统需要产品经理超强的逻辑思维能力和业务理解能力&#xff0c;整理了一批后台原型组件及完整的用 Axure 8 制作的后台系统页面&#xff0c;方便产品经理们快速上手制作后台原型。 包括交互元件、首页、商品、订单、库存、用户、促销、运营、内容、统计、财务、设置、…

步进电机驱动芯片TB6600HG部分翻译

有些参数没看懂。一边设计&#xff0c;一边修正。 目录 1.芯片梗概 2.引脚配置 1)引脚含义 2)内部逻辑 3.功能详解 1&#xff09;励磁模式设置 2&#xff09;功能设置 3&#xff09;初始模式 4&#xff09;100% 电流设置(电流值) 5&#xff09;OSC 6&#xff09;衰减…

【unity】【WebRTC】从0开始创建一个Unity远程媒体流app-构建可同步场景

【背景】 最近在研究远程画面,所以就实践了一下。技术采用我认为比较合适的WebRTC。 这篇文章的基础是我的另一篇博文,如果希望顺利完成本篇操作,请先关注我后查询我的如下博文: 【WebRTC】【Unity】Unity Web RTC1-Unity中简单实现远程画面 上一篇地址: 【WebRTC】【Uni…

【PWN】学习笔记(三)【返回导向编程】(中)

目录 课程回顾动态链接过程 课程 课程链接&#xff1a;https://www.bilibili.com/video/BV1854y1y7Ro/?vd_source7b06bd7a9dd90c45c5c9c44d12e7b4e6 课程附件&#xff1a; https://pan.baidu.com/s/1vRCd4bMkqnqqY1nT2uhSYw 提取码: 5rx6 回顾 管道符 | 把前一个指令的输出作…

一文了解java中volatile关键字

认识volatile volatile关键字的作用有两个&#xff1a;变量修改对其他线程立即可见、禁止指令重排。 第二个作用我们后面再讲&#xff0c;先主要讲一下第一个作用。通俗点来说&#xff0c;就是我在一个线程对一个变量进行了修改&#xff0c;那么其他线程马上就可以知道我修改…

树莓派zero w入坑指南

树莓派zero w入坑指南 入坑契机 说起创客不得不提到开源硬件Raspberry Pi(树莓派)。它是一款基于ARM的微型电脑主板&#xff0c;以MicroSD卡为硬盘&#xff0c;提供HDMI和USB等外部接口&#xff0c;可连接显示器和键鼠。以上部件全部整合在一张仅比信用卡稍大的主板上&#x…

MHA高可用实验(故障模拟+恢复)

实验前准备 MHA manager节点服务器&#xff1a;192.168.188.13 MHA node和manager组件 Master节点服务器&#xff1a;192.168.188.14 mysql5.7、MHA node组件 Slave节点服务器1&#xff1a;192.168.188.15 mysql5.7、MHA node组件 Slave节点服务器2&#xff1a;192.…

uniapp x 相比于其他的开发系统框架怎么样?

首先我们要知道niapp这是一种基于Vue.js开发的跨平台应用框架&#xff0c;可以将同一套代码同时运行在多个平台上&#xff0c;包括iOS、Android、H5等。相比其他开发系统框架&#xff0c;他有什么优点呢&#xff1f;让我们共同探讨一下吧&#xff01; 图片来源&#xff1a;unia…

python每日学10:关于python实用版本的选择

用python也有好几年了&#xff0c;也会经常安装python&#xff0c;因为有工作需要&#xff0c;可能在各个地方使用python&#xff0c;自己的电脑也经常重装&#xff0c;重装后会装python&#xff0c;还有的时候&#xff0c;装的包太多了&#xff0c;影响整个环境的使用&#xf…

Meta 开启 Ray-Ban人工智能眼镜多模态 AI 功能测试,可识别物体、翻译语言

Meta 公司宣布他们将向部分用户推送其 Meta Ray-Ban 智能眼镜的多模态 AI 功能。这项功能允许 AI 助手通过眼镜的摄像头和麦克风了解佩戴者所看到和听到的事物&#xff0c;并提供相关信息和帮助。 Meta CEO 马克・扎克伯格在 Instagram 上展示了这项功能&#xff0c;他让眼镜推…

【WSL】Windows下的Linux子系统使用方法指南

▒ 目录 ▒ &#x1f6eb; 导读需求开发环境 1️⃣ WSL安装启用或关闭windows功能安装分发命令行启动Linux 2️⃣ WSL 的基本命令显示帮助列出可用的 Linux 发行版列出已安装的 Linux 发行版检查 WSL 版本更新 WSL通过 PowerShell 或 CMD 运行特定的 Linux 发行版关闭WSL全部服…

Amazon SageMaker:让机器学习变得更简单、更强大

授权说明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 前言&#xff1a; 在大数据时代的浪潮中&#xff0c;数据不再只…

期末数组函数加强练习

前言&#xff1a;由于时间问题&#xff0c;部分题解取自网友&#xff0c;但都是做过的好题。 对于有些用c实现的题目&#xff0c;可以转化成c实现&#xff0c;cin看成c的读入&#xff0c;可以用scanf&#xff0c;输出cout看作printf&#xff0c;endl即换行符 开胃菜&#xff…

多项创新技术加持,汉威科技危化品企业、化工园区两大智能化管控平台重磅发布

化工产业是我国支柱产业&#xff0c;化学品产值约占全球的40%&#xff0c;位列第一。石油化工、煤化工、化肥、制药、冶金、氢能源等产业持续升级迭代&#xff0c;化工园区作为重要载体&#xff0c;不断推动产业朝专业化、集约化方向发展。 近年来我国危险化学品领域重特大事故…

动手学深度学习-注意力机制

10.1注意力提示 自主性注意力机制 有意识的注意力机制。非自主性注意力机制 无意识的注意力机制。 小结: 人类的注意力是有限的&#xff0c;有价值和稀缺的资源。受试者使用非自主性和自主性提示有选择的引导注意力&#xff0c;前者基于突出性&#xff0c;后者则依赖于意识。…

【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解

目录 1 设置请求映射路径1.1 环境准备 1.2 问题分析1.3 设置映射路径 2 请求参数2.1 环境准备2.2 参数传递2.2.1 GET发送单个参数2.2.2 GET发送多个参数2.2.3 GET请求中文乱码2.2.4 POST发送参数2.2.5 POST请求中文乱码 欢迎大家回到《Java教程之Spring30天快速入门》&#xff…

【操作系统导论】内存篇——分段

引入 利用基址和界限寄存器&#xff0c;操作系统很容易将不同进程重定位到不同的物理内存区域。 但是&#xff0c;对于一整个地址空间&#xff0c;在栈和堆之间存在一块空闲空间&#xff0c;如果将整个地址空间分配给进程&#xff0c;无疑造成了大量的内存浪费。 为了解决这…

软件测试面试八股文(答案解析+视频教程)

1、B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行&#xff0c;可以实现跨平台&#xff0c;客户端零维护&#xff0c;维护成本低&#xff0c;但是个性化能力低&#xff0c;响应速度较慢。 C/S响应速度快&#xff0c;安全性强&#xff0c;一般应用于局域网中&#xf…