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

结尾

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

相关文章
|
1月前
|
缓存 监控 安全
Enge问题解决教程
Enge问题解决教程
26 0
|
11月前
|
前端开发 中间件 C#
(1)入门MasaFramework教程
(1)入门MasaFramework教程
183 0
|
运维 监控 Java
SpringBootAdmin极简教程
SpringBoot应用可以通过Actuator来暴露应用运行过程中的各项指标,Spring Boot Admin通过这些指标来监控SpringBoot应用,然后通过图形化界面呈现出来。
212 0
SpringBootAdmin极简教程
|
算法 应用服务中间件 数据库
这或许是我写的最全的BLAST教程
Basic local alignment search tool (BLAST) 包括:blastn, blastp, blastx, tblastn, tblastx等. 使用conda安装即可。
3978 0
|
Web App开发 缓存 网络协议
fildder教程
原文:fildder教程 转载地址:写得很不错的fildder教程   http://kb.cnblogs.com/page/130367/ Fiddler的基本介绍   Fiddler的官方网站:  www.fiddler2.com       Fiddler的官方帮助:http://docs.telerik.com/fiddler/knowledgebase/quickexec   Fiddler官方网站提供了大量的帮助文档和视频教程, 这是学习Fiddler的最好资料。
1504 0
|
Web App开发 缓存 网络协议
|
存储 算法 C++
《C++程序设计教程(第3版)》——导读
本节书摘来自华章出版社《C++程序设计教程(第3版)》一书中的目录,作者张志航,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1508 0