<!--Original source http://www.html5canvastutorials.com/tutorials/html5-canvas-wrap-text-tutorial/--> <canvas id="myFont" width="500" height="400"></canvas>
JQuery 1.9.1
$(function(){ function wrapText(cxt,txt,x,y,maxWidth,lineHeight){ //cxt:<canvas>,txt:文案,x:文案的起始x軸,y:文案的起始y軸,maxWidth:文案的最大寬度,lineHeight:文案行高 var words=txt.split(' ');//把文案用空白字元為依據來分割並給予words。 var line='';//擷取出來的單字將要存入的容器。 for(var n=0; n < words.length; n++){//按照擷取出來的單字總數來循環執行。 var txtLine=line+words[n]+' ';//每個單字加上一個空白字元並放入txLine。 var metrics=cxt.measureText(txtLine).width;//計算每一次執行時txtLine長度是多少。 if(metrics > maxWidth && n > 0){//判斷當txtLine長度超過maxWidth且文字多於0個。 cxt.fillText(line,x,y);//新增一行文字。 line=words[n]+' ';//改變該行文字的第一個字為使txtLine超出maxWidth的那個文字。 y+=lineHeight;//y軸往下移動一個LineHeight的高度。 }else{ line=txtLine;//直接蓋過原本的當行的文字。 }; }; cxt.fillText(line,x,y);//創建第一行文字。 }; var article='The greatest test of courage on earth is to bear defeat without losing heart. 世界上對勇氣的最大考驗是忍受失敗而不喪失信心。'; var cxt=$('#myFont')[0].getContext('2d'); cxt.font='20px Calibri'; cxt.fillStyle='#666'; wrapText(cxt,article,10,20,490,30); });
主要使用function :
- wrapText() - 此function的作用為,繪製一個規定範圍內按照英文書寫習慣,文案自動折行。
- split() - 把一段文字分割成多個單一文字,'文字物件'.split('字符串或正則表達式,按照這個值去分割文字物件 - 必填', '返回分割的最大返回分割的最大長度,以1為起始計算點,無設定以全文字物件長度返回 - 非必填')。
範例 解說 "Hi! How was today?".split( '' ); 結果//H,i,!, ,H,o,w, ,w,a,s, ,t,o,d,a,y,?
每一個字元包含空白字元都會被分割列出。"Hi! How was today?".split( ' ' ); 結果//Hi!,How,was,today?
使用'空白字元'會以空白字元為分割點分割列出,空白字元會被省略掉。"Hi! How was today?".split( ' ', 2 ); 結果//Hi!,How
只抓取第1、2個單字。":1:2:3".split( ':' ); 結果// ,1,2,3
以:作為分割點分割列出,:會被省略掉。var words = sentence.split( ' / \s+/ ' ); 把句子分割成單字。
Result
JSFiddle
https://jsfiddle.net/MickeyChen/84cuwtos/
沒有留言:
張貼留言