字符雨canvas

整体思路:

  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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

泰森多边形半平面求交 - 洛谷 - P3297 [SDOI2013] 逃考

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 往期相关背景半平面求交 点击前往 voronoi 图求解点击前往 题目大意 题目链接 https://www.luogu.com.cn/problem/P3297 小杨家是一个矩阵&#xff0c;所有亲戚都在…

Monkey工具之fastbot-iOS实践

背景 目前移动端App上线后 crash 率比较高&#xff0c; 尤其在iOS端。我们需要一款Monkey工具测试App的稳定性&#xff0c;更早的发现crash问题并修复。 去年移动开发者大会上有参加 fastbot 的分享&#xff0c;所以很自然的就想到Fastbot工具。 Fastbot-iOS安装配置 准备工…

变电站蓄电池在线监测系统(论文+源码)

1. 系统设计 本次课题为变电站蓄电池在线监测系统的设计&#xff0c;其系统架构如图3.1所示&#xff0c;包括了主控制器STC89C52单片机&#xff0c;液晶显示器LCD1602,模数转换器ADC0832&#xff0c;电流传感器ACS712&#xff0c;分压电阻&#xff0c;蜂鸣器以及温度传感器。在…

实用篇 | 3D建模中Blender软件的下载及使用[图文详情]

本文基于数字人系列的3D建模工具Blender软件的安装及使用&#xff0c;还介绍了图片生成3D模型的AI工具~ 目录 1.Blender的下载 2.Blender的使用 3.安装插件(通过压缩包安装) 4.实例 4.1.Blender使用MB-Lab插件快速人体模型建构 4.1.1.点击官网&#xff0c;进行下载 4.1.…

消息可靠性保证

回顾RabbitMQ的消息传递过程 如图所示&#xff0c;发生消息丢失的可能阶段也就是生产者发送消息&#xff0c;时rabbitmq存储消息时&#xff0c;消费者消费消息时。项目源码&#xff1a;gitee 生产者发送消息阶段 生产者发送消息时把交换机名写错生产者发送消息时把routingK…

推荐一款好用的包含表格识别的OCR网站

在当今数字化的时代&#xff0c;文字和表格识别已经成为了许多行业的关键技术。无论是处理大量的纸质文档&#xff0c;还是从网络上收集数据&#xff0c;OCR&#xff08;光学字符识别&#xff09;技术都扮演着重要的角色。然而&#xff0c;对于许多用户来说&#xff0c;OCR软件…

Infobright列存数据库原理介绍

简介 Infobright 是一个面向 OLAP 场景的开源列存数据库。比较容易找到代码的版本是 Infobright Community Edition 4.0.7&#xff0c;大概是 2006 年前后的代码。2016 年6 月&#xff0c;Infobright 决定停止开源1。由于它同时提供企业版和社区版&#xff0c;开源版本的功能相…

斑马zebra目标检测数据集VOC+YOLO格式2300张

斑马是由四百万年前的原马进化出来的&#xff0c;最早出现的斑马可能是细纹斑马。有关史前马科动物的化石现存于美国爱达荷州克文的克文化石床国家博物馆。斑马的史前马为“克文马”&#xff08;美洲斑马或者克文斑马&#xff09;&#xff0c;学名为“Equussimplicidens”&…

WordPress VIP收费下载插件Erphpdown v17.0.1 开心版

会员推广下载专业版 WordPress插件&#xff08;erphpdown&#xff09;是模板兔开发的一款针对虚拟资源收费下载/付费下载/付费视频/收费查看/付费阅读/付费查看/VIP下载查看的插件&#xff0c;经过完美测试运行于wordpress 3.x-5.x版本。后续模板兔会增加更多实用的功能。 模板…

docker部署go gin框架 Linux环境

目录 文章目的是什么 环境介绍 Linux 环境下 docker 部署 go gin 详细步骤 部署 gin 文章目的是什么 假设我们学习了 go 语言&#xff0c;在 Linux 上安装了 go 相关的程序&#xff0c;也能直接运行&#xff0c;使用以下命令&#xff1a; go run main.go 假如代码是这样的…

跟着我学Python基础篇:08.集合和字典

往期文章 跟着我学Python基础篇&#xff1a;01.初露端倪 跟着我学Python基础篇&#xff1a;02.数字与字符串编程 跟着我学Python基础篇&#xff1a;03.选择结构 跟着我学Python基础篇&#xff1a;04.循环 跟着我学Python基础篇&#xff1a;05.函数 跟着我学Python基础篇&#…

java设计模式学习之【代理模式】

文章目录 引言代理模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用图片加载示例代码地址 引言 在现实生活中&#xff0c;我们经常使用代理来处理我们不想直接参与或无法直接参与的事务&#xff0c;例如&#xff0c;使用律师来代表法庭上的案件。在软件开发…

计算机网络——网络层——OSPF协议的介绍

什么是 OSPF &#xff1f; OSPF 是一个基于链路状态的自治系统内部路由协议&#xff0c;在 TCP/IP 的网络层中进行路由选择&#xff0c;常用于构建大型企业网络或者服务上的骨干网络。在互联网核心路由器之间也可以使用。 OSPF 概述 OSPF 使用的是 Dijkstra&#xff08;最短…

Vue 实现一个弹出框,允许用户输入信息,并在确认时将输入的信息进行输出到控制台

父组件用来点击按钮弹出弹出框 <!--ParentComponent.vue--> <template><div><button click"showPopupV">点我会有个弹出框&#xff01;&#xff01;&#xff01;</button><PopupComponent v-if"showPopup" :data"p…

【退订】阿里云产品

之前因为学习需要使用了阿里云上的产品服务&#xff0c;项目结束后给忘记了&#xff0c;直到最近阿里云发短信我才知道&#xff1a; 我使用的是datawork的服务&#xff0c;现在先登录阿里云官网&#xff1a; 阿里云-计算&#xff0c;为了无法计算的价值 (aliyun.com) 之后点…

【毕业设计】基于STM32的智能衣柜设计

1、功能说明 功能如下: 1、用stm32控制ds18b20采集温度 2、然后按键可以设置上下限温度&#xff0c; 3、采集的温度低于下限温度时候 打开加热片开始加热&#xff0c; 4、加热到上限温度关闭加热片停止加热&#xff0c; 5、采集的温度可以在oled显示&#xff0c; 6、然后弄个按…

MySQL增量备份与恢复

实验环境 某学校近期在进行期中考试&#xff0c;要求数据库管理员负责一班&#xff0c;二班学生的考试成绩录入&#xff0c;为保证数据的可靠性&#xff0c;数据库管理员在录入学生成绩后均要做数据库备份&#xff0c;并且为了测试备份数据是否可 用&#xff0c;模拟数据丢失故…

MySQL数据库,视图、存储过程与存储函数

数据库对象&#xff1a; 常见的数据库对象&#xff1a; 视图&#xff1a; 视图是一种虚拟表&#xff0c;本身是不具有数据的占用很少的内存空间。 视图建立在已有表的基础上&#xff0c;视图赖以建立的这些表称为基表。 视图的创建和删除只影响视图本身&#xff0c;不影响对…

多云网络互通问题怎么解决——SD-WAN

随着业务的扩张&#xff0c;企业对云资源的用量也越来越大&#xff0c;逐渐形成了混合云架构。要解决多云网络互通的问题&#xff0c;其中一种常见的组网方案是云专线。然而&#xff0c;这种方式也带来了一系列问题&#xff0c;包括&#xff1a; 1、受服务商约束&#xff0c;需…

Docker真的好难用啊,为什么说它移植性好啊?

看起来你对Docker有点困惑和挑战呀。Docker刚开始确实有点难以入门&#xff0c;但是一旦掌握了它的核心概念和操作&#xff0c;你会发现它其实非常强大和便利。 接下来我会根据你提出的问题和场景&#xff0c;详细地解答。 关于你的实际问题&#xff1a; 刚接触时的困难是正。…