前言
最近在使用canvas开发一个H5页面。其中有部分文字因为超出背景所定义的宽度需要进行换行。如果你使用过canvas,那么你一定用过文本绘制,遗憾的是canvas文档中,文本绘制并没有自动换行的方法。本文将带您打造一个可以自动换行的canvas轮子
canvas 文本绘制
文本绘制一共有两个方法
//在指定的位置填充实心文本 fillText(text, x, y, [maxWidth]) //在指定的位置填充空心文本 strokeText(text,x,y,[maxWidth])
text:需要绘制的文本内容 x:向x轴方向的偏移量(x轴坐标) y:向y轴方向的偏移量(y轴坐标) maxWidth:允许绘制的最大宽度 单位px
|
当设置 maxWidth小于所需要绘制文本的宽度时,超出的部分将会进行隐藏。
改造绘制方法
canvas api中 有这样一个方法
context.measureText(text)`
|
code实现
CanvasRenderingContext2D.prototype.wrapText = function (canvas,text,x,y,maxWidth,lineHeight){ if(typeof text !='string' || typeof x !='number' || typeof y !='number'){ return; } if(typeof maxWidth =='undefined'){ maxWidth = (canvas && canvas.width) || 300; } if(typeof lineHeight == 'undefined'){ lineHeight = (canvas.canvas && parseInt(window.getComputedStyle(canvas.canvas).lineHeight)) || parseInt(window.getComputedStyle(document.body).lineHeight) } var arrText = text.split(''); var line = ''; for (var n = 0; n < arrText.length; n++) { var testLine = line + arrText[n]; var metrics = canvas.measureText(testLine); var testWidth = metrics.width; if (testWidth > maxWidth && n > 0) { canvas.fillText(line, x, y); line = arrText[n]; y += lineHeight; } else { line = testLine; } } canvas.fillText(line, x, y); }
|
canvas:画布实例 lineHeight:换行高度
使用方法

如上图所示 即可实现文字换行啦。
最后
感谢您观看此篇博客,如果对您有帮助,希望能给个👍评论收藏三连!