绘制文本

同样的,canvas也为绘制文本提供了相应的方法.

2D上下文提供的文本绘制方法主要有两个:

  1. fillText()
  2. strokeText()

这两个方法都接受四个参数

  1. 要绘制的文本字符串
  2. 绘制文本的X坐标
  3. 绘制文本的Y坐标
  4. 最大像素宽度

这些方法都以以下属性为基础:

  • font: 表示文本样式,大小,字体, 该属性以 CSS 中指定字体的格式来指定
  • textAlign: 表示文本对齐方式,可能的值有 "start" "end" "left" "right" "center"
  • textBaseline:表示文本基线

上述属性都有默认值,所以没有必要每次使用都为上述属性重新赋值

一般来说使用 fillText 的情况比较多,因为该方法显示的文字和网页中正常显示文字的区别不大,而 strokeText 方法则会对文本进行描边

以上一篇文章中的 时钟的例子为基础,如果我们希望为该时钟绘制表盘上的数字

那么则可以使用下方的代码:

// context 是已经获取到的2D上下文

context.font = "bold 14px Arial";
context.textAlign = "center";
context.textBaseline = "middle";
context.fillText = ("12",100,20);

此外关于文本基线 textBaseline ,该值以绘制的 y 坐标为标准

  • top: 表示 y 坐标与文本的顶部对齐
  • bottom:则表示 y 坐标与文本的底部对齐
  • 其余值则对应一些特定基线

由于绘制文本比较复杂,尤其是当我们需要将文本控制在某一区域中的时候

2D上下文为此提供了一个辅助确定文本大小的方法 measureText()

该方法接收一个参数,即要绘制的文本

返回一个 TextMetrics 对象,返回对象目前只有一个 width 属性,通过该属性可以获得传入的文本显示在页面中的大小

如果我们希望绘制的文本宽度小于某个值则可以使用该方法来判断文本大小

如下代码所示:

var fontSize = 100;

context.font = fontSize + "px Arial";

while(context.measureText("Hello World!").width > 140){
fontSize --;
context.font = fontSize + "px Arial";
} context.fillText("Hello World",10,10); // 此时绘制的文本宽度将小于140

之前提到的绘制文本方法的第四个参数也能实现该效果,但是浏览器对该参数的支持并不乐观,所以使用时需要多加注意

Javascript高级编程学习笔记(88)—— Canvas(5)绘制文本的更多相关文章

  1. Javascript高级编程学习笔记(83)—— 富文本选区(3)

    富文本选区 在富文本编辑器中使用 iframe 的 getSelection() 方法可以获取选中的文本 该方法是 window 对象和 document 对象的属性,调用后会返回一个当前选选择文本的 ...

  2. Javascript高级编程学习笔记(82)—— 富文本操作(2)

    操作富文本 与富文本编辑器的交互的主要方式就是使用 document.execCommand() 方法 该方法可以对文档执行自定义命令,并且可以应用大多数格式 该方法接收三个参数: 要执行命令的名称 ...

  3. Javascript高级编程学习笔记(81)—— 富文本(1)

    富文本编辑 富文本编辑又称为: WYSIWYG(What You See Is What You Get,所见即所得) 常用于博客等用途,虽然没有规范,但是在IE最先引入后其他的浏览器厂商也相继完成了 ...

  4. Javascript高级编程学习笔记(87)—— Canvas(4)绘制路径

    绘制路径 2D上下文支持许多在画布上绘制路径的方法 通过路径可以创造出复杂的形状和线条,要绘制路径首先必须调用beginPath()方法,表示开始绘制路径 然后再通过下列的方法绘制路径: arc(x, ...

  5. Javascript高级编程学习笔记(86)—— Canvas(3)绘制矩形

    绘制矩形 矩形是唯一一种可以直接在2D上下文中绘制的形状. 与矩形有关的方法包括: fillRect() strokeRect() clearRect() 上述方法都接收四个参数: 绘制矩形的 X 坐 ...

  6. Javascript高级编程学习笔记(94)—— Canvas(11) 合成

    合成 除了之前介绍的属性之外,还有两个属性会应用到整个2d上下文中; globalAlpha 用于指定所有绘制的透明度 globalComposition 用于表示后绘制的图形怎样与先绘制的图形进行结 ...

  7. Javascript高级编程学习笔记(93)—— Canvas(10) 模式及图像数据

    模式 模式其实就是重复的图像,用来填充或描边图形 要创建一个新模式,可以调用 createPattern()并传入两个参数 一个HTML img元素 用于表示如何重复的字符串 "repeat ...

  8. Javascript高级编程学习笔记(90)—— Canvas(7) 绘制图像

    绘制图像 2D绘图上下文内置了对图像的支持 如果希望将一幅图绘制到画布上,可以使用 drawImage() 的方法 该方法有三种不同的参数数组合以对应不同的应用场景 将<img>绘制到画布 ...

  9. Javascript高级编程学习笔记(89)—— Canvas(6) 变换

    变换 通过上下文的变化,可以对图像进行处理后再将其绘制到画布上 当我们创建上下文时,会以默认值初始化变化矩阵,在默认的变换矩阵下所有处理都按描述直接绘制. 而当我们为上下文应用变换时,会导致使用不同的 ...

随机推荐

  1. DataTable插件通过js导出Excel

    $('#myTab').DataTable( { serverSide: false,//分页,取数据等等的都放到服务端去. true为后台分页,每次点击分页时会请求后台数据,false为前台分页 d ...

  2. 错误: Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for studentDao.insert

    详细错误信息: org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: java. ...

  3. fastjson与net.sf.json区别

    在现在的开发当中,绝大多数引用阿里巴巴的fastjson.当然net.sf.json同样可以使用. 一.引入net.sf.json包 首先用net.sf.json包,当然你要导入很多包来支持commo ...

  4. 客户端和浏览器都不能连接SVN服务器

    错误提示 1.在对话框中提示 2.在As上提示 Error:svn: E731001: Unable to connect to a repository at URL 'https://XXX/sv ...

  5. vs 修改活动解决方案配置后无法调试,不生成pdb文件,“当前不会命中断点 还没有为该文档加载任何符号” 解决方法

    修改vs的活动解决配置后无法进行调试,比如在Release.Debug之后新增一个TEST,切换到test后就无法进行调试. 修改一下 项目属性->生成->高级 中“调试信息”改为 ful ...

  6. 【玩转开源】BananaPi R2——移植RPi.GPIO 到 R2

    1. 首先给大家介绍一下什么是RPi.GPIO. 简单去讲,RPi.GPIO就是一个运行在树莓派开发板上可以通过Python去控制GPIO的一个中间件. 现在我这边做了一个基础功能的移植,接下来大家可 ...

  7. linux条件判断:eq、ne、gt、lt、ge、le

    -eq(equal) :判断是否相等,相等为真 -ne(inequality):判断是否不等,不等为真 -gt(greter than):判断是否大于,大于为真 -lt(less than):判断是否 ...

  8. 独立版Jexus配置SSL,支持https访问

    一.申请证书[腾讯免费证书] 二.验证DNS,即解析域名.记录类型选择 TXT ,主机记录与证书上的主机记录保持一致,记录值也与证书上的记录值保持一致 三.等待DNS验证与CA轮询,轮询成功后即可下载 ...

  9. mysql记录执行的SQL语句

    show variables like "general_log%"; SET GLOBAL general_log = 'ON';SET GLOBAL general_log = ...

  10. js数据结构与算法--单链表的实现与应用思考

    链表是动态的数据结构,它的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成. 现实中,有一些链表的例子. 第一个就是寻宝的游戏.你有一条线索,这条线索是指向寻找下一条线 ...