Canvas学习笔记 | 文本操作

yumo6668个月前 (04-26)技术文章103

#头条创作挑战赛#

简介

在Canvas中,文本操作的常用方法有:

方法

说明

fillText()

绘制实心文本

strokeText()

绘制空心文本

measureText()

获取文本长度

在Canvas中,文本操作的常用属性有:

方法

说明

font

定义文本字体样式

textAlign

定义文本水平对齐方式

textBaseline

定义文本垂直对齐方式

fillStyle

定义实心文本颜色

stokeStyle

定义空心文本颜色

strokeText()方法

在Canvas中,我们使用strokeText()绘制空心文本。

语法:

ctx.strokeText(text, x, y, maxWidth);

说明:

参数说明:

  • 参数text表示想要绘制的文本字符串;
  • 参数x表示文本的横坐标;
  • 参数y表示文本的纵坐标,是文本最下边的坐标
  • 参数maxWidth为可选参数,表示文本的最大宽度(单位为像素)。如果文本长度超出maxWidth的值,会将文本压缩至maxWidth。

示例:strokeText()方法示例

示例源码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>strokeText()方法示例</title>
  </head>
  <body>
    <canvas id="canvas" width="400" height="200"
      style="border: 1px dashed #333333" ></canvas>
    <script>
      window.onload = function () {
        // 1、获取 Canvas 对象
        var canvas = document.getElementById("canvas");
        // 2、获取上下文环境对象
        var ctx = canvas.getContext("2d");
        // 3、开始绘制图形
    
        var text = "嗨皮汪小成";
        ctx.font = "bold 30px 微软雅黑";
        ctx.strokeStyle = "red";
        ctx.strokeText(text, 50, 50);
      };
    </script>
  </body>
</html>

效果图:

fillText()方法

在Canvas中,我们使用fillText()方法绘制实心文本。

语法:

ctx.fillText(text, x, y, maxWidth);

说明:

参数说明:

  • 参数text表示想要绘制的文本字符串;
  • 参数x表示文本的横坐标;
  • 参数y表示文本的纵坐标,是文本最下边的坐标
  • 参数maxWidth为可选参数,表示文本的最大宽度(单位为像素)。如果文本长度超出maxWidth的值,会将文本压缩至maxWidth。

示例:fillText()方法示例

示例源码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>fillText方法示例</title>
  </head>
  <body>
    <canvas id="canvas" width="400" height="200"
      style="border: 1px dashed #333333" ></canvas>
    <script>
      window.onload = function () {
        var canvas = document.getElementById("canvas");
        var ctx = canvas.getContext("2d");
    
        var text = "嗨皮汪小成";
        ctx.font = "bold 30px 微软雅黑";
        ctx.fillStyle = "red";
        ctx.fillText(text, 50, 50);
      };
    </script>
  </body>
</html>

效果图:

measureText()方法

在Canvas中,我们可以使用measureText()方法获取一个文本的长度。measureText()方法返回一个对象,这个对象只有一个width属性,width属性的值即为文本的长度。

语法:

var length = ctx.measureText(text).width;

说明:

参数text表示一个字符串,measureText()方法返回对象的width属性即为这个字符串的长度。

示例:使用measureText()方法使文本水平居中

示例源码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>使用measureText()方法使文本水平居中</title>
  </head>
  <body>
    <canvas id="canvas" width="400" height="200"
      style="border: 1px dashed #333333" ></canvas>
    <script>
      window.onload = function () {
        var canvas = document.getElementById("canvas");
        var ctx = canvas.getContext("2d");
    
        var text = '嗨皮汪小成@掘金';
        ctx.font = '20px bold';

        var textWidth = ctx.measureText(text).width;
        var xPosition = size / 2 - textWidth / 2;
        ctx.fillStyle = 'red';
        ctx.fillText(text, xPosition, 80);
      };
    </script>
  </body>
</html>

效果图:

font属性

在Canvas中,我们使用font属性定义文本的字体样式。context.font的用法与CSS中font属性的用法是一样的。

语法:

ctx.font = "font-style font-weight font-size/line-height font-family"

说明:

font属性的默认是10px sans-serif。定义font属性后,后面的文本会一直延用这些font属性值,直至font属性被重新定义成其它属性值。

因在前面的示例中已经用到了font属性值,这里不再单独编写示例程序。

textAlign属性

在Canvas中,我们使用textAlign属性定义文本水平方向的对齐方式。

语法:

ctx.textAlign = "属性值";

说明:

textAlign属性取值如下表:

属性值

说明

start

文本在指定的横坐标开始

end

文本在指定的横坐标结束

left

文本左对齐

right

文本右对齐

center

文本的中心被放置在指定的横坐标处

示例:textAlign属性示例

示例源码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>textAlign属性示例</title>
  </head>
  <body>
    <canvas id="canvas" width="400" height="400"
      style="border: 1px dashed #333333" ></canvas>
    <script>
      window.onload = function () {
        var canvas = document.getElementById("canvas");
        var ctx = canvas.getContext("2d");
    
        // 在横坐标150处画一条基准线
        ctx.moveTo(150, 0);
        ctx.lineTo(150, 400);
        ctx.strokeStyle = 'hotpink';
        ctx.stroke();

        ctx.font = '12px bold';

        ctx.textAlign = 'start';
        ctx.fillText('textAlign取值为start', 150, 50);

        ctx.textAlign = 'end';
        ctx.fillText('textAlign取值为end', 150, 100);

        ctx.textAlign = 'left';
        ctx.fillText('textAlign取值为left', 150, 150);

        ctx.textAlign = 'right';
        ctx.fillText('textAlign取值为right', 150, 200);

        ctx.textAlign = 'center';
        ctx.fillText('textAlign取值为center', 150, 250);
      };
    </script>
  </body>
</html>

效果图:

textBaseline属性

在Canvas中,我们使用textBaseline属性定义文本垂直方向的对齐方式。

语法:

ctx.textBaseline = "属性值";

说明:

textBaseline属性取值如下表:

属性值

说明

alphabetic

文本基线是普通英文字母的基线

top

文本基线是em方框的顶端

middle

文本基线是em方框的中心

bottom

文本基线是em方框的底端

示例:textBaseline属性示例

示例源码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>textBaseline属性示例</title>
  </head>
  <body>
    <canvas id="canvas" width="400" height="400"
      style="border: 1px dashed #333333" ></canvas>
    <script>
      window.onload = function () {
        var canvas = document.getElementById("canvas");
        var ctx = canvas.getContext("2d");

        ctx.font = '12px bold';

        // 在纵坐标200处画一条基准线
        ctx.moveTo(0, 200);
        ctx.lineTo(400, 200);
        ctx.strokeStyle = 'hotpink';
        ctx.stroke();

        ctx.font = '12px bold';

        ctx.textBaseline = 'alphabetic';
        ctx.fillText('alphabetic', 50, 200);

        ctx.textBaseline = 'top';
        ctx.fillText('top', 130, 200);

        ctx.textBaseline = 'middle';
        ctx.fillText('middle', 210, 200);

        ctx.textBaseline = 'bottom';
        ctx.fillText('bottom', 290, 200);
      };
    </script>
  </body>
</html>

效果图:



相关文章

用CSS 实现元素垂直居中,有哪些好的方案?

水平居中方案:水平居中设置1、行内元素设置 text-align:center2、定宽块状元素设置 左右 margin 值为 auto3、不定宽块状元素a:在元素外加入 table 标签(完整的,包括...

deepseek制作&quot;网页端学生签到系统&quot;

网页端学生签到系统制作经验分享 在日常教学管理中,高效准确的签到统计工作至关重要。为了提升签到管理的效率,我着手开发了一个网页端学生签到系统,它能够实现名单导入、签到状态记录与修改以及结果导出等功能,...

JAVAEE前奏-今天带大家认识HTML!高手勿进。

接上篇内容。上次介绍了整个课程,目的是告诉大家学习路线,不要偏了。今天开始慢慢告诉大家这些课程的重点。也就是需要学些什么有用的东西,那些没用的可以先不要去学习,等学到一定程度了,再慢慢去挖掘。首先开始...

CSS3 - 新单位vw、vh、vmin、vmax使用详解(附样例)

像 px、em 这样的长度单位大家肯定都很熟悉,前者为绝对单位,后者为相对单位。CSS3 又引入了新单位:vw、vh、vmin、vmax。下面对它们做个详细介绍。一、基本说明1,vw、vh、vmin、...

Angular 自定义指令 Tooltip

#头条创作挑战赛#本文同步本人掘金平台的文章:https://juejin.cn/post/7082241253819023397一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第...

零基础教你学前端——85、高度自适应

这节课,我们学习如何让元素的宽度和高度在容器里自适应。什么是宽高自适应呢?页面里有两个 div,开始的时候宽度都是 800px,当我们将浏览器窗口的宽度拖动到小于 800px 的时候,我们发现:上面的...