html5 canvas的绘制文本自动换行的示例代码


本文摘自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;//计算canvas的宽度

var initHeight=15;//绘制字体距离canvas顶部初始的高度

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;//20为字体的高度

        lineWidth=0;

        lastSubStrIndex=i;

    }

    if(i==str.length-1){//绘制剩余部分

        ctx.fillText(str.substring(lastSubStrIndex,i+1),0,initHeight);

    }

}

见效果图:

阅读剩余部分

相关阅读 >>

用canvas实现简单的下雪效果(附代码)

h5手机扫码怎么实现

word-wrap怎么自动换行?css强行自动换行教程

css中文字相关属性的介绍

h5设置或返回音频/视频播放的当前位置(以秒计)的属性currenttime

HTML5调用百度地图api获取当前位置并直接导航目的地的方法

HTML5优点的详细介绍

HTML5 web storage的图文详解

h5视频中背景音乐如何自动播放

h5实现可缩放的时钟动画

更多相关阅读请进入《HTML5》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...