本文摘自PHP中文网,作者青灯夜游,侵删。
在使用 canvas 绘制某字符串的时候,我们可能想要让该字符串在某处按要求换行。那么应该如何实现,本文就来介绍一下,有兴趣的可以了解一下。本文介绍怎么解决canvas绘图过程中,drawText的换行问题,先看一个大家平时在canvas绘制文本都会遇到的问题:
一个150*100的canvas画布,加个边框明显边界
1 | <canvas id= "canvas" style= "border:solid 1px darkgoldenrod;" width= "200px" height= "100px" ></canvas>
|
我们先来看fillText()方法,strokeText()方法同理

1 2 3 4 5 6 | 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)
这个函数可以测量字体的宽高度,那就好办了,我们计算好我们字符串的长度加上一个大概的宽度,基本上可以处理这种换行的问题了。
下面看具体实现方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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;
var initHeight=15;
var lastSubStrIndex= 0;
for (let i=0;i<str.length;i++){
lineWidth+=ctx.measureText(str[i]).width;
if (lineWidth>canvasWidth){
ctx.fillText(str.substring(lastSubStrIndex,i),0,initHeight);
initHeight+=20;
lineWidth=0;
lastSubStrIndex=i;
}
if (i==str.length-1){
ctx.fillText(str.substring(lastSubStrIndex,i+1),0,initHeight);
}
}
|
见效果图:

阅读剩余部分
相关阅读 >>
h5移动端各种各样的列表的制作方法(二)
HTML5实现的在线视频播放
具体解析HTML5文件读取filereader及文件读取模块的封装
h5的多线程如何实现web worker
HTML5之pushstate和popstate操作history无刷新改变当前url的详细介绍
如何通过HTML5实现摇一摇的功能
HTML5前景怎么样
HTML5中canvas的问题总结
HTML5 解决苹果手机不能自动播放音乐问题的相关技巧
HTML5的开发工具有哪些
更多相关阅读请进入《HTML5》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » html5 canvas的绘制文本自动换行的示例代码