怎么在html5中的canvas绘制文本自动换行
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,本篇内容介绍了"怎么在html5中的canvas绘制文本自动换行"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够
千家信息网最后更新 2025年11月09日怎么在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安全错误
数据库的锁怎样保障安全
数据库搭建是不是数据库开发
软件开发购买服务合同
国家网络安全周每年几月
机器人软件开发工程师要求的年龄
网络安全管理类 体能
暑假网络安全主题班会
数学不好少学计算机网络技术吗
剑网三服务器人数
简答题简述客户机服务器的特点
通达信导出自定义公式数据库
设计模式在软件开发中的意义
服务器 硬盘寿命
大学生网络安全政治意识淡薄
视频服务器支持1078协议
主机与数据库的区别
数据安全性和数据库安全性
纽约理工大学网络安全硕士
永恒之塔兄弟怎么切换服务器
学软件开发哪个学校好
戴尔服务器蓝屏c0000006
svn服务器作用
温州软件开发的费用
服务器带宽最高能有多少
用本机测试的服务器
软件开发项目成本估算过程
服务器几核电脑配置一样吗
台式电脑建立数据库
抖音小程序用什么软件开发
csmar数据库需要钱吗
服务器可以设置超级管理员吗