怎么在html5中的canvas绘制文本自动换行
发表于:2024-10-28 作者:千家信息网编辑
千家信息网最后更新 2024年10月28日,本篇内容介绍了"怎么在html5中的canvas绘制文本自动换行"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够
千家信息网最后更新 2024年10月28日怎么在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安全错误
数据库的锁怎样保障安全
客户关系管理软件开发成本
校园网络技术工作总结
大学生网络安全包括哪些
游戏分类数据库
餐饮软件用什么软件开发
湛泸软件开发
番禺网络安全运维哪个品牌好
数据库跟vs怎么连接的
财神网络技术
数据库服务器找不到了
数据库中的组都可以删除
数据库的cmd命令
上海物联网智慧小区软件开发
科技金融成互联网金融制胜点
刀片服务器如何打开
伍尚科技互联网整合营销
数据库运行内存大怎么处理
西安飞凡网络技术咨询公司
服务器保密管理
网络安全与舆情应对培训体会
猛虎视频软件开发
睿视点歌系统服务器
兄弟下载软件开发
oracle删除数据库实例
sql数据库上传到云平台
网络安全的知识的内容
棋牌软件开发专业开发
imap收件服务器
多服务器管理软件
安全服务器网络防火墙