canvas(五)绘制文本
1.绘制描边文本
- 说明:描边的属性是共用的,无论是绘制直线还是文字,所以有需要的话要单独设置描边颜色,相关语法如下
| 语法 | 说明 |
|---|---|
| ctx.strokeStyle | 设置描边的颜色(文本颜色) |
| ctx.font | 设置文本,语法与 CSS font 属性相同,详见 |
| ctx.strokeText(str,x0,y0) | 传入参数,进行文本绘制 |
<script>
var canvas = document.querySelector("canvas")
var ctx = canvas.getContext("2d")
//绘制中心线
ctx.moveTo(0,canvas.height/2)
ctx.lineTo(canvas.width,canvas.height/2)
//绘制虚线
ctx.setLineDash([5,10])
//描边
ctx.stroke()
//开启路径
ctx.beginPath()
ctx.moveTo(canvas.width/2,0)
ctx.lineTo(canvas.width/2,canvas.height)
//绘制虚线
ctx.setLineDash([5,10])
//描边
ctx.stroke()
//以正中央为基点绘制文本)
//文本颜色就是描边的颜色
ctx.strokeStyle = "red"
//设置字体大小和字体类型
ctx.font = "40px 微软雅黑"
//取消虚线绘制
ctx.setLineDash([1,0])
//绘制文本
ctx.strokeText("你好世界",canvas.width/2,canvas.height/2)
</script>

2.修改文本对齐方式(水平方向)
- 说明:文本默认左对齐,可以通过ctx.textAlign设置文本的对齐方式,他有以下几个值:
| 可选值 | 说明 |
|---|---|
| left | 默认,左对齐,原点位于文字的左下角 |
| center | 居中对齐,原点位于文字的中下方 |
| right | 右对齐,原点位于文字的右下角 |
<script>
//其余代码省略
//绘制左对齐文本(默认就是这个,不设置也是这效果)
ctx.textAlign ="left"
ctx.strokeText("默认左对齐",canvas.width/2,canvas.height/2)
//绘制居中对齐的文本
ctx.textAlign = "center"
ctx.strokeText("居中对齐",canvas.width/2,100)
//绘制右对齐的文本
ctx.textAlign = "right"
ctx.strokeText("右对齐",canvas.width/2,200)
</script>

- 注意:这个属性会被后面的代码继承
3.修改文本基线
- 说明:通俗的说,就是文本垂直方向的对其方式,通过ctx.textBaseline可以修改文本的基线,方法与css的vertical-align类似,他有以下几个值:
| 可选值 | 说明 |
|---|---|
| baseline | 默认,基线对其 |
| middle | 垂直方向上居中对齐 |
| top | 文本顶对齐 |
| bottom | 文本底对齐 |
<script>
//以上代码省略
//绘制底部对齐文本
ctx.textBaseline ="bottom"
ctx.strokeText("底对齐",0,canvas.height/2)
//绘制垂直居中对齐的文本
ctx.textBaseline = "middle"
ctx.strokeText("垂直居中对齐",150,canvas.height/2)
//绘制顶对齐的文本
ctx.textBaseline = "top"
ctx.strokeText("顶对齐",350,canvas.height/2)
</script>

4.绘制填充文本(实心文字)
- 说明:填充的属性是共用的,无论是填充矩形还是文字,所以有需要的话要单独设置颜色,相关语法如下
| 语法 | 说明 |
|---|---|
| ctx.fillStyle | 设置填充的颜色(文本颜色) |
| ctx.font | 设置文本,语法与 CSS font 属性相同,详见 |
| ctx.fillText(str,x,y,maxWidth) | 传入参数,进行文本绘制 |
<script>
//以上代码省略
//设置填充颜色
ctx.fillStyle = "green"
//设置文本大小和字体
ctx.font = "40px 微软雅黑"
//绘制填充文本
ctx.fillText("填充的文本",canvas.width/2,canvas.height/2)
//绘制填充文本(限制文本最大宽度)(宽度为画布的1/2)
ctx.fillText("这是有最大宽度限制的文本",0,200,canvas.width/2)
</script>

- 注意:参数maxWidth(文本的最大宽度)可选,如果文本的实际宽度大于这个限制,所有的文本会被压扁
5.获取文本的宽度
相关语法:ctx.measureText(str)返回一个文本测量结果的对象,其中的width属性描述的就是文本的宽度
注意:返回文本宽度除了与文本内容有关,还和当前设定的字体大小相关
<script>
//以上代码省略
//绘制填充文本
var cName = "人类三大本质"
var name = "hello world"
//设置文本大小和字体
ctx.font = "40px 微软雅黑"
ctx.fillText(cName,50,50)
ctx.fillText(name,50,100)
//打印宽度
console.log(ctx.measureText(cName).width)
console.log(ctx.measureText(name).width)
//重新设置文本大小和字体
ctx.font = "20px 微软雅黑"
ctx.fillText(cName,50,150)
ctx.fillText(name,50,200)
//打印宽度
console.log(ctx.measureText(cName).width)
console.log(ctx.measureText(name).width)
</script>

- 实例:为文本添加一条长度相等的下划线
<script>
var canvas = document.querySelector("canvas")
var ctx = canvas.getContext("2d")
//设置绘制原点
var x=80,y=150
//设置填充颜色
ctx.fillStyle = "green"
//定义文本
var cName = "人类三大本质"
//设置文本大小和字体
ctx.font = "40px 微软雅黑"
//设置底居中
ctx.textBaseline = "bottom"
ctx.fillText(cName,x,y)
//获取文本宽度
var textWidth = ctx.measureText(cName).width
//绘制直线
ctx.moveTo(x,y)
ctx.lineTo(x+textWidth,y)
ctx.stroke()
</script>

canvas(五)绘制文本的更多相关文章
- Javascript高级编程学习笔记(88)—— Canvas(5)绘制文本
绘制文本 同样的,canvas也为绘制文本提供了相应的方法. 2D上下文提供的文本绘制方法主要有两个: fillText() strokeText() 这两个方法都接受四个参数 要绘制的文本字符串 绘 ...
- Canvas:绘制文本
基础 画布除了绘制图形以外还可以绘制文本,画布中的文本可以设置字体大小.字体格式.对齐方式(横向和纵向对齐方式),并且还可以制作很炫酷的文本,比如渐变文字. 文本有以下三个属性,控制文本的字体大小.字 ...
- -_-#【Canvas】绘制文本
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 浅谈JavaScript的Canvas(绘制图形)
HTML5中新增加的一个元素canvas,要使用canvas元素,浏览器必须支持html5.通过canvas标签来创建元素,并需要为canvas指定宽度和高度,也就是绘图区域的大小. <canv ...
- html5 canvas 笔记三(绘制文本和图片)
绘制文本 fillText(text, x, y [, maxWidth]) 在指定的(x,y)位置填充指定的文本,绘制的最大宽度是可选的. strokeText(text, x, y [, ma ...
- canvas绘制文本
canvas绘制文本 属性和方法 font = value 设置字体 textAlign = value 设置字体对齐方式 start, end, left, right, center textBa ...
- canvas 绘制文本
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 用html5的canvas画布绘制贝塞尔曲线
查看效果:http://keleyi.com/keleyi/phtml/html5/7.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...
- HTML5在canvas中绘制复杂形状附效果截图
HTML5在canvas中绘制复杂形状附效果截图 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,绘图环境提供了如下方法来绘制复杂的形状或路径. beginPath() : 开始绘制一个新路 ...
- FontMetrics ----- 绘制文本,获取文本高度
Canvas 绘制文本时,使用FontMetrics对象,计算位置的坐标. public static class FontMetrics { /** * The maximum distance a ...
随机推荐
- webpack系列-webpack内置插件ProvidePlugin的应用(定义全局变量,例如vue引入jquery全局使用)
vue+webpack使用ProvidePlugin插件引入jquery 先看一个实例,webpack+vue引入jquery并全局使用,这儿指通过配置,不是在静态页面使用script标签直接引入jq ...
- CSS – z-index
介绍 z-index 是用来设置 element 层次高低的 (当 element 重叠的时候) 参考: 4 reasons your z-index isn't working (and how t ...
- ASP.NET Core – Program.cs and Startup.cs 小笔记
前言 ASP.NET Core 6.0 以后, 默认模板去掉了 Program.cs 的 namespace, class 和 Startup.cs, 一开始看会有点懵. 这篇大概记入一下, prog ...
- [namespace hdk] ordered_vector
功能: 已重载[]运算符 已重载+运算符(合并) 已重载+=运算符 已重载构造函数 clear() it() 以std::vector形式返回自身 print(char=' ',char='\n') ...
- Android UsbDeviceManager 代码分析
USBDeviceManager是一个Android系统中用于管理USB设备的类,它是系统服务之一.其主要功能是控制USB设备的连接和断开,以及管理USB设备的权限和状态.下面是对USBDeviceM ...
- 精彩回顾|【2023 ACDU 中国行·深圳站】数据库主题交流活动成功举办!
6月30日下午,[ACDU 中国行·深圳站]在深圳回酒店圆满落下帷幕.本次活动由中国数据库联盟(ACDU)联合墨天轮社区主办,围绕「数据库前沿技术揭秘及应用」这一主题,七位数据库行业的领军人物从数据库 ...
- iOS关于搜索不规则瀑布流布局的实现小结
最近在项目开发中遇到了不规则搜索布局的问题.之前常用的解决方案是用一个tableview用一个循环动态的加载,唯一的缺点是需要动态的移除,其实也已经足够.https://download.csdn.n ...
- .NET周刊【10月第1期 2024-10-06】
国内文章 基于DPAPI+RDP技术实现本地打开远程程序,并映射到本地机器桌面上 https://www.cnblogs.com/weskynet/p/18445584 该教程讲述如何使用Remote ...
- vagrant快速安装虚拟机
- 用故事说透HTTPS
本文来自素燕公众号,原文地址:用故事说透https 故事中的主演: 小华今年上大一,这是她第一次离开父母,独自一人到北京上学.今天妈妈的生日,想了想要给妈妈一个祝福,便给妈妈发了条消息: 妈妈收到这条 ...