本文介紹怎么解決canvas繪圖過程中,drawText的換行問題,先看一個大家平時在canvas繪制文本都會遇到的問題:
一個150*100的canvas畫布,加個邊框明顯邊界
canvas id= canvas >我們先來看fillText()方法,strokeText()方法同理
var c=document.getElementById( canvas var ctx=c.getContext( 2d ctx.fill >可以看到fillText()在固寬的canvas中,字數(shù)過多的時候,并不會自動換行,我們可以增加canvas本身的寬度,但這不是解決問題的根本方法。還記得之前介紹canvas基本api的時候,有一個函數(shù),context.measureText(text) 這個函數(shù)可以測量字體的寬高度,那就好辦了,我們計算好我們字符串的長度加上一個大概的寬度,基本上可以處理這種換行的問題了。
下面看具體實現(xiàn)方法:
var c=document.getElementById( canvas var ctx=c.getContext( 2d ctx.fill >見效果圖:
算法:計算字符串str里面每個字符的寬度的和lineWidth,如果大于canvas的寬度,就截取這部分進行繪制,然后重置lineWidth,保存開始截取的最后的索引,當(dāng)循環(huán)變量i為最后一個字符的時候,直接繪制剩余部分。
接下來:我們封裝成一個方法,方便以后直接調(diào)用:
/*str:要繪制的字符串canvas:canvas對象initX:繪制字符串起始x坐標(biāo)initY:繪制字符串起始y坐標(biāo)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;i str.length;i++){ lineWidth+=ctx.measureText(str[i]).width; if(lineWidth canvasWidth-initX){//減去initX,防止邊界出現(xiàn)的問題 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); }以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助!
以上就是html5 canvas的繪制文本自動換行的示例代碼的詳細內(nèi)容,其它編程語言
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。
新聞熱點
疑難解答