初识canvas

2023-09-21 11:03:57

对于一个前端人员来说,canvas是必须掌握的技能之一。如果你想像画画一样在浏览器上作画,那么canvas就可以做你的画布。

接下啦我们就以画画的标准来初步认识下canvas

1.画布

画画的第一步你得有一张画纸或者画布,canvas标签就是我们的画布。

画布都是有尺寸的,如果你想要做大一点的画那就需要大一点的画布,反之也是,所以canvas上面有widthheight两个属性来定义画布的尺寸,单位是px

再想一个问题,如果我们需要做几张画,那我们就需要更多的画布,如何区分他们呢?
不如给他们每一个画布定义一个名字,canvas上的id就是他的名字,方便我们知道使用的是那一张画布。

<canvas id="c1" width="500" height="500"></canvas>

2.画笔

画布准备好了,下一步就应该提笔作画了。但是画笔在哪?
我们可以通过getContext获取到我们的画笔。
注意getContext方法只有在canvas元素上才可以使用。

当然,并不是所有浏览器对canvas都有很好的兼容,ie浏览器只有9以上才可以使用,所以我们在使用的时候一般会使用getContext方法做判断,如果可以拿到该方法,那么就表示浏览器支持canvas,不支持的时候canvas标签会被当作普通标签,我们可以在canvas标签里面直接写提示内容:

<canvas id="c1" width="500" height="500">抱歉,您的浏览不支持canvas,请更新!</canvas>
//获取画布
let c1 = document.getElementById('c1')
if (!c1.getContext) {
	console.log('您的浏览器不支持acnvas')
	return false
}
//获取画笔
let ctx = c1.getContext('2d')

3.落笔

所有工具准备就绪,我们就可以开始落笔画画了。想要画出一幅完美的画,那你的心中一定是有一副草图在的。你应该知道你想要画一个什么东西,化的东西有多大,是什么形状。

假设我们现在需要画一个矩形,那我们心中首先需要对这个矩形的大小,方位做计算。我们打算把他画在画布的左边?还是右边?或者中间?是铺满整个画布还是占一半或者更小?

思考完上面的问题后我们就应该开始落笔了。
ctx.beginPath: 方法就是告诉画布我现在开始作画了。
ctx.rect(0, 120, 100, 100) : rect 就是专门画矩形的方法,里面包含四个参数,参数一和二分别标识矩形左上角的坐标,注意第二个参数y坐标不同于数学里面的坐标,它是向下的
在这里插入图片描述
参数3跟参数4则是这个矩形的宽高,这里我们设置的是一个宽高都为100的矩形。
这个时候其实矩形是不可见的。因为我们没有告诉画布我们是想要展示一个矩形边框路径还是一个被填充的矩形。
ctx.stroke():使用stroke就可以描绘出矩形的路径。
ctx.closePath():不要忘记告诉画笔已经结束绘画,可以提笔收墨了。
在这里插入图片描述
ctx.fill():当然我们也可以使用fill直接填充矩形让他展现。
在这里插入图片描述
有时候我们想直接画出一个绘制路径的矩形或者填充的矩形, 还可以使用fillRectstrokeRect,他们相当于是刻好的印章,可以直接印在画布上,而不用我们去一步一步描绘。

更多推荐

Python在工业自动化领域的应用详解

概要当我们开始讨论在工业自动化应用中使用哪种编程语言时,通常我们会首先谈论IEC61131-3标准中用于可编程逻辑控制器(PLC)的语言,比如经典的梯形图(LD)或结构化文本(ST)。对于机器人等应用,我们经常看到低级编译语言,比如C语言。这几年有不少人讨论在工厂生产线上使用Python。是什么让Python这种解释型

【Maven教程】(七)聚合与继承:多模块项目实用特性介绍,反应堆构建及裁剪 ~

Maven·聚合与继承1️⃣account-persist1.1account-persist的POM1.2account-persist的主代码1.3account-persist的测试代码2️⃣聚合3️⃣继承3.1account-parent3.2可继承的POM元素3.3依赖管理3.4插件管理4️⃣聚合与继承的关系

创建UI账号密码登录界面

头文件#ifndefMYWND_H#defineMYWND_H#include<QPushButton>#include<QMainWindow>classMyWnd:publicQMainWindow{Q_OBJECTpublic:MyWnd(QWidget*parent=nullptr);~MyWnd();};#e

web安全漏洞-SQL注入实验2

实验目的学习sql显注的漏洞判断原理掌握sqlmap工具的使用分析SQL注入漏洞的成因实验工具sqlmapsqlmap是用python写的开源的测试框架,支持MySQL,Oracle,PostgreSQL,MicrosoftSQLServer,MicrosoftAccess,IBMDB2,SQLite,Firebird

记录一个iOS使用陀螺仪3d效果的抖动问题

使用陀螺仪的时候,遇到一个问题,就是在拖动scrollView滚动的时候,3d效果的图片会抖动实现3d效果的代码-(void)updateWithGravityX:(double)gravityXgravityY:(double)gravityYgravityZ:(double)gravityZ{//因为在斜向上45度

postgresql|数据库|centos7下基于postgresql-12的主从复制的pgpool-4.4的部署和使用

前言:postgresql数据库只用自身的一些配置是无法做到最优的优化的,需要通过一些外置插件(中间件)来提高服务器的整体性能,通俗的说就是数据库仅仅依靠自身是无法达到性能最优的,很多时候需要更改数据库的整体架构,使用一些目前来说成熟的技术,比如,读写分离技术,负载均衡技术,高速缓存技术等等集群方面的技术。下图是一些较

vue3将页面导出成PDF文件(完美解决图片、表格内容分割问题)

vue3将页面导出成PDF文件(完美解决图片、表格内容分割问题)1、安装依赖2、在utils中创建htmlToPDF.js文件3、在vue中引入并使用1、安装依赖npminstall--savehtml2canvas//页面转图片npminstalljspdf--save//图片转pdf2、在utils中创建htmlT

Java 中将多个 PDF 文件合并为一个 PDF

一.前言我们将从以下两个方面向您展示如何将多个PDF文件合并为一个PDF:1.将文件中的多个PDF合并为单个PDF2.将流中的多个PDF合并为单个PDF1.了解Spire.PDF库要在Java中合并PDF文件,我们将使用Spire.PDF库。Spire.PDFforJava是一个PDFAPI,使Java应用程序能够在不

电子时钟制作(瑞萨RA)(6)----配置RTC时钟及显示时间

概述本文将详细讲解如何借助e2studio来对瑞萨微控制器进行实时时钟(RTC)的设置和配置,以便实现日历功能和一秒钟产生的中断,从而通过串口输出实时数据。实时时钟(RTC)模块是一种时间管理外设,主要用于记录和控制日期和时间。与常见的微控制器(MCU)中的定时器不同,RTC时钟提供了两种计时方式:日期模式和计时模式。

基于RASC的keil电子时钟制作(瑞萨RA)(7)----配置RTC时钟及显示时间

基于RASC的keil电子时钟制作7_配置RTC时钟及显示时间概述硬件准备视频教程RTC配置RTC属性配置设定时间设定周期性中断设定日历闹钟时间回调函数演示效果数码管显示日期主程序概述本文将详细讲解如何借助e2studio来对瑞萨微控制器进行实时时钟(RTC)的设置和配置,以便实现日历功能和一秒钟产生的中断,从而通过串

Adobe Bridge 2024:解锁创意力的数字媒体利器

在当今数字化的时代,创意工作者们需要处理和管理大量的数字媒体资源,如照片、视频、音频等。为了提高工作效率和创作质量,他们需要一个功能强大、易于使用的工具来组织、浏览和共享这些媒体文件。幸运的是,AdobeBridge2024正好满足了这些需求,并成为让创意力得以解锁的数字媒体利器。首先,AdobeBridge2024提

热文推荐