怎么在html5中的canvas绘制文本自动换行
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,本篇内容介绍了"怎么在html5中的canvas绘制文本自动换行"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够
千家信息网最后更新 2025年02月05日怎么在html5中的canvas绘制文本自动换行
本篇内容介绍了"怎么在html5中的canvas绘制文本自动换行"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
先看一个大家平时在canvas绘制文本都会遇到的问题:
一个150*100的canvas画布,加个边框明显边界
我们先来看fillText()
方法,strokeText()
方法同理
var c=document.getElementById("canvas"); var ctx=c.getContext("2d"); ctx.fillStyle="#E992B9";ctx.lineWidth=1;var str = "假如生活欺骗了你,请不要悲伤!thank you!"ctx.fillText(str,0,20);
可以看到fillText()
在固宽的 canvas 中,字数过多的时候,并不会自动换行,我们可以增加 canvas 本身的宽度,但这不是解决问题的根本方法。还记得之前介绍 canvas 基本 api 的时候,有一个函数,context.measureText(text)
这个函数可以测量字体的宽高度,那就好办了,我们计算好我们字符串的长度加上一个大概的宽度,基本上可以处理这种换行的问题了。
下面看具体实现方法:
var c=document.getElementById("canvas"); var ctx=c.getContext("2d"); ctx.fillStyle="#E992B9";ctx.lineWidth=1; var str = "假如生活欺骗了你,请不要悲伤!thank you!"var lineWidth = 0;var canvasWidth = c.width;//计算canvas的宽度var initHeight=15;//绘制字体距离canvas顶部初始的高度var lastSubStrIndex= 0; //每次开始截取的字符串的索引for(let i=0;icanvasWidth){ ctx.fillText(str.substring(lastSubStrIndex,i),0,initHeight);//绘制截取部分 initHeight+=20;//20为字体的高度 lineWidth=0; lastSubStrIndex=i; } if(i==str.length-1){//绘制剩余部分 ctx.fillText(str.substring(lastSubStrIndex,i+1),0,initHeight); }}
见效果图:
算法:计算字符串 str 里面每个字符的宽度的和lineWidth
,如果大于 canvas 的宽度,就截取这部分进行绘制,然后重置lineWidth
,保存开始截取的最后的索引,当循环变量 i 为最后一个字符的时候,直接绘制剩余部分。
接下来:我们封装成一个方法,方便以后直接调用:
/*str:要绘制的字符串canvas:canvas对象initX:绘制字符串起始x坐标initY:绘制字符串起始y坐标lineHeight:字行高,自己定义个值即可*/function canvasTextAutoLine(str,canvas,initX,initY,lineHeight){ var ctx = canvas.getContext("2d"); var lineWidth = 0; var canvasWidth = c.width; var lastSubStrIndex= 0; for(let i=0;icanvasWidth-initX){//减去initX,防止边界出现的问题 ctx.fillText(str.substring(lastSubStrIndex,i),initX,initY); initY+=lineHeight; lineWidth=0; lastSubStrIndex=i; } if(i==str.length-1){ ctx.fillText(str.substring(lastSubStrIndex,i+1),initX,initY); } } }
"怎么在html5中的canvas绘制文本自动换行"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
字符
字符串
宽度
方法
问题
文本
字体
时候
部分
高度
悲伤
接下来
内容
函数
坐标
更多
知识
索引
边界
剩余
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
全国大学生网络安全精英赛题库
软件开发中属于设计阶段的是
数据库表达基因分析
文件服务器 ftp
网上下载的服装数据库怎么打开
护苗网络安全课手抄报排版
TCGA数据库有患者信息吗
网络安全犯罪侦查专业
hp服务器 电话
怎样画数据库关系
我的世界服务器怎么设置显示皮肤
湛江卫星软件开发
服务器可以连接磁盘无法写入
河南邓州网络安全宣传
网络安全诠释指标
软件开发费用平均人天多少钱
关于学习网络安全法
河南网络时间服务器
河南信阳软件开发
通信网络技术项目四
梁溪区海航软件开发记录
数据库中的事件怎么打开
网络安全常驻心板报
计算机三级网络技术时间
网络安全的危害不包括
广西电信服务器托管
车衣机裁数据库
联合国贸易数据库查数据
服务器拓扑图制作软件
软件开发未来职业规划书