有時候我們在使用Canvas繪制一段文本時,會需要通過measureText()方法獲取文本的寬度,例如:
創建canvas標簽
<canvas id="canvas"></canvas>
獲取一段文本的寬度
var canvas = document.getElementById('canvas');var ctx = canvas.getContext('2d');var text = ctx.measureText('foo'); // TextMetrics objecttext.width; // 16;
如上所示,measureText返回的其實是一個TextMetrics對象,它包含了文本的寬度,MDN上的解釋如下:
The CanvasRenderingContext2D.measureText() method returns a TextMetrics object that contains information about the measured text (such as its width for example).
在微信小程序現在的版本(v2.13.7)中,小程序的canvas還不支持measureText,所以我自己寫了個類似于measureText方法,通過canvas獲取文本的寬度,方法如下:
function measureText (text, fontSize=10) { text = String(text); var text = text.split(''); var width = 0; text.forEach(function(item) { if (/[a-zA-Z]/.test(item)) { width += 7; } else if (/[0-9]/.test(item)) { width += 5.5; } else if (//./.test(item)) { width += 2.7; } else if (/-/.test(item)) { width += 3.25; } else if (/[/u4e00-/u9fa5]/.test(item)) { //中文匹配 width += 10; } else if (//(|/)/.test(item)) { width += 3.73; } else if (//s/.test(item)) { width += 2.5; } else if (/%/.test(item)) { width += 8; } else { width += 10; } }); return width * fontSize / 10;}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答