Cavans 简单入门小教程 2

简介: 前端西瓜哥

大家好,我是前端西瓜哥。

今天继续讲解 Cavans 入门小教程的第二部分。

清空画布的指定矩形区域

ctx.clearRect(x, y, width, height);

清除左上角坐标为 (x, y),宽高为 width 和 height 的矩形区域范围。

清除整个画布 的写法为:

const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, canvas.width, canvas.height);

另外,如果你重新设置 canvas 元素的宽或高,画布也会整个清空。

canvas.height = canvas.height;

绘制文字

ctx.fillStyle = '#5391F5'; // 蓝色
ctx.font = '48px serif';
ctx.textBaseline = 'top';
ctx.fillText('Hello Canvas!', 10, 10); // 填充文字
ctx.lineWidth = 2;
ctx.strokeText('Hello Canvas!', 10, 10); // 描边文字

我们先设置一下字体的样式。

ctx.font 用于指定字体的样式,默认值为 10px sans-serif

ctx.font 的取值同 CSS 的 font 属性。font 是个简写属性,即多个属性的组合。其中必须要包含 font-sizefont-family 属性,否则就会失效。

我一直觉得简写属性是个坏文明,因为它通常有太多的属性,而且可以有多种组合方式,不好记忆。

Canvas 没有提供 fontSize 属性,你只能通过 font 属性来设置文字大小,还得额外设置一个 font-family 属性,挺糟心的属于是。

ctx.textBaseline 用于设置文字的基线,默认值为 alphabetic

image.png

考虑到我们设置坐标时,习惯为左上角,所以可以考虑将 textBaseline 设置为 top

ctx.fillText()方法传入(1)文字内容、(2)文字起点的坐标、以及(3)可选的最大宽度,文字超过这个宽度,就会为适应这个宽度把文字挤扁。

ctx.strokeText() 用法同 ctx.fillText,不再赘述。

绘制的效果如下:

image.png

绘制图片

const img = new Image();
img.src = './watermelon.jpg';
img.onload = function() {
  ctx.drawImage(img, 300, 0); // 将图片绘制到画布的 (300, 0) 位置。
}

我们通过 ctx.drawImage() 方法来绘制图片。

该方法有多种传参方式,可以实现只使用图片的部分区域,然后进行缩放。

但本文是入门文章,所以上面的代码只是将原图片不做额外处理,原封不动地绘制到画布上。

绘制的结果如下:

image.png

存档和回档

因为我们每次要绘制新的图形,可能要临时修改全局的一些属性,比如 fillStylefont 之类的,在绘制完这个图形后再恢复。

如果我们每次都要记住修改了哪些属性,然后再显式地改回原来的属性,那成本实在是太大了,还容易泄漏。

所以 Canvas 提供了一对方法来解决这个问题。

ctx.fillStyle = '#5391f5'; // 此时 #5391f5 蓝色
ctx.save(); // 存档
ctx.fillStyle = '#FFDF5C'; // 黄色
ctx.fillRect(20, 80, 20, 20);
ctx.restore(); // 回档,fillStyle 重新变回蓝色
ctx.fillRect(50, 80, 20, 20);

ctx.save() 会将当前的绘制状态全部保存起来,然后执行 ctx.restore() 则会将这个状态读取回来,并将之前的存档删除。

其实底层是一个栈,你可以连续 save,会将多个绘制状态推入栈,然后 restore 则会将最顶部的绘制状态出栈,然后应用到 canvas 上。

图片的绘制结果为:

image.png

结尾

本文讲解了如何清空特定区域、绘制文字、绘制图片、存档和回档的操作,建议你也要动手尝试一番。

相关文章
|
8月前
|
数据采集 存储 调度
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
在Python网页抓取领域,BeautifulSoup和Scrapy是两款备受推崇的工具。BeautifulSoup易于上手、灵活性高,适合初学者和简单任务;Scrapy则是一个高效的爬虫框架,内置请求调度、数据存储等功能,适合大规模数据抓取和复杂逻辑处理。两者结合使用可以发挥各自优势,例如用Scrapy进行请求调度,用BeautifulSoup解析HTML。示例代码展示了如何在Scrapy中设置代理IP、User-Agent和Cookies,并使用BeautifulSoup解析响应内容。选择工具应根据项目需求,简单任务选BeautifulSoup,复杂任务选Scrapy。
168 1
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
|
8月前
|
数据采集 JSON Java
Java爬虫获取微店快递费用item_fee API接口数据实现
本文介绍如何使用Java开发爬虫程序,通过微店API接口获取商品快递费用(item_fee)数据。主要内容包括:微店API接口的使用方法、Java爬虫技术背景、需求分析和技术选型。具体实现步骤为:发送HTTP请求获取数据、解析JSON格式的响应并提取快递费用信息,最后将结果存储到本地文件中。文中还提供了完整的代码示例,并提醒开发者注意授权令牌、接口频率限制及数据合法性等问题。
|
SQL 关系型数据库 MySQL
【Databand】日期时间函数
【Databand】日期时间函数
231 1
|
XML Java Maven
idea配置maven步骤及常见问题
本文介绍了在IDEA中配置Maven的详细步骤,包括Maven的下载、系统环境变量的配置、Maven本地仓库的设置、镜像加速的配置,以及在IDEA中指定Maven路径和配置文件。同时,还提供了解决每次新建项目需要重新手动配置Maven问题的方法。
idea配置maven步骤及常见问题
若依修改,修改代理线上接口登录后台,若依框架如何使用线上的接口,如何在本地获取网页上的接口
若依修改,修改代理线上接口登录后台,若依框架如何使用线上的接口,如何在本地获取网页上的接口
|
前端开发 C# 容器
WPF/C#:实现导航功能
WPF/C#:实现导航功能
279 0
|
Shell 开发工具 git
如何使用git上传代码github仓库
如何使用git上传代码github仓库
|
开发框架 .NET API
.NET 体系概览图集 - 2024 最全总结
.NET Core 是一个免费、跨平台、开源的开发平台,用于一站式构建不同类型的应用程序。 .NET Core 是以 .NET Framework 为基础,但是经过重新设计、实现的的新一代框架,实现了原 .NET Framework 中的几乎所有功能,核心特点就是开源、跨平台。
786 0
.NET 体系概览图集 - 2024 最全总结
|
Go 数据库
Go语言之GORM框架(四)——预加载,关联标签与多态关联,自定义数据类型与事务(完结篇)
Go语言之GORM框架(四)——预加载,关联标签与多态关联,自定义数据类型与事务(完结篇)
251 0