HTML5 canvas 繪製的文字如何換行?
HTML5 裡的 canvas 元素是一個圖形容器,我們可以通過 JavaScript 來控制它繪製各種文字和影象。
在使用 canvas 繪製某字串的時候,我們可能想要讓該字串在某處按要求換行。
這該怎麼實現呢?
你是不是想到了 JavaScript 裡的轉義字元 “\n” (換行符)?
在字串里加入 “\n” 在繪製時會有換行效果嗎?讓我們試一試:
example.html
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title >Example</title>
</head>
<body>
<canvas id="canvas" height="400" width="400"></canvas>
</body>
<script src="main.js"></script>
</html>
main.js
var c = document.getElementById("canvas");
var context = c.getContext("2d");
function draw(){
context.font = "20px Arial";
context.fillStyle = "black";
context.textBaseline = "middle";
context.fillText("Hello, World!\nWhat a nice day.",0,10);
}
draw();
效果如圖
可以發現,文字並沒有換行
接下來,讓我們來對比一下,看看加不加“\n”對文字繪製有沒有影響
將draw()函式裡的程式碼改動一下:
function draw(){
context.font = "20px Arial";
context.fillStyle = "black";
context.textBaseline = "middle";
context.fillText("Hello, World!What a nice day.",0,10);
context.fillText("Hello, World!\nWhat a nice day.",0,30);
}
對比效果如圖
上面的是沒加 “\n” 的效果,下面是加了 “\n” 的效果
看起來上下兩個的效果就差了一個空格而已。這個空格哪來的?
其實,這個不是空格,而是 canvas 無法顯示這個換行符,而顯示出的一個佔位符
為什麼輸入 “\n” 從沒法換行呢?
我個人覺得,是因為瀏覽器無法知道你的下一行字串的起始座標應該在哪
沒有現成的,沒關係,我們可以自己自己動手創造一個
/****繪製自動換行的字串****/
function drawText(t,x,y,w){
var chr = t.split("");
var temp = "";
var row = [];
context.font = "20px Arial";
context.fillStyle = "black";
context.textBaseline = "middle";
for(var a = 0; a < chr.length; a++){
if( context.measureText(temp).width < w ){
;
}
else{
row.push(temp);
temp = "";
}
temp += chr[a];
}
row.push(temp);
for(var b = 0; b < row.length; b++){
context.fillText(row[b],x,y+(b+1)*20);
}
}
把這個函式加進main.js裡,然後再往draw()函式加上一行:
drawText("Hello, World!What a nice day.",0,30,110);
效果看起來還不錯:
這是怎麼做到的呢?
其實不難。簡單來說,就是將需要換行的字串用split方法分割成一個以單個字元為元素的陣列,然後將該陣列的每個元素(也就是每個字元)依次拼接成一個臨時字串,然後測量臨時字串的長度。如果臨時字串的長度大於等於規定長度,就把該臨時字串看做一行,然後將剩下的字元繼續拼接;否則就繼續拼接,直至字元全部拼接完畢。最後,將每行的字串以一定間隔按順序輸出,就實現了換行的效果。
上面的drawText()函式還有很多可以完善的地方,大家可以根據要求自行改良
相關推薦
canvas之文字換行
當canvas的寬度不夠寬時,canvas不會自動換行,可以用下面的程式碼處理 <body> <canvas id="canvas" width="200" height="200" style="background:pink;"></canvas>
HTML5 canvas 繪製的文字如何換行?
HTML5 裡的 canvas 元素是一個圖形容器,我們可以通過 JavaScript 來控制它繪製各種文字和影象。 在使用 canvas 繪製某字串的時候,我們可能想要讓該字串在某處按要求換行。 這該怎麼實現呢? 你是不是想到了 JavaScript 裡
小程序---canvas畫圖,生成分享圖片,畫圖文字換行
return 指正 png ttext def fun context lte ctx 小程序目前只支持轉發,不支持分享朋友圈,為了能實現分享,很多線上小程序通過生成分享圖片,保存到相冊來給用戶增加分享的可能。 具體思路及簡要代碼如下: 一:canvas畫圖 draw
微信小程式canvas文字換行效果
我們在canvas上繪製多行文字的時候,不可能一行一行的繪製,這時就需要到了換行這個功能。 文字換行 引數:1、canvas物件,2、文字 3、距離左側的距離 4、距離頂部的距離 5、(不用管)6、文字的寬度 //文字換行 引數:1、canvas物件,2、文字 3、距離
Cocos2d-x 更改文字換行風格 ( cocos2dx change line )
pad 限制長度 != inline detail _id 興趣研究 end sans Cocos2dx change line在 cocos2dx change line 的實現中,我們能夠簡單的使用 dimensions屬性控制換行。使用它僅僅需將相應的參數值傳入構造
textarea placeholder文字換行
line 設置 div span text 技術分享 源代碼 tor unicode 要實現這樣的效果 第一反應是直接在placeholder屬性值裏輸入\n換行,如: <textarea rows="5" cols="50" placeholder="1
div寬度固定,將其中的文字換行,並動態獲取div的高
rip title oat clas 獲取 pre jquery logs -c <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title&
echarts x軸文字換行顯示
mat rownumber false 管控 ffffff style slab 社交 知識 xAxis : [ {
CSS文字換行加省略號
文字換行的後需要對超出的內容加省略號,text-overflow: ellipsis 無法實現此需求 更多精彩 更多技術部落格,請移步 asing1elife’s blog 解決 overflow: hidden; // 只有webkit核心瀏
p標籤中的文字換行
參考文章 word-break:break-all和word-wrap:break-word的區別 CSS自動換行、強制不換行、強制斷行、超出顯示省略號 屬性介紹 white-space: 如何處理元素中的空白 normal: 預設, 被瀏覽器忽略空白 pre: 空白被瀏覽器保
Canvas繪製文字(七)
canvas的文字是以圖形形式繪製的,實際他不是文字,只是像文字而已;一旦繪製之後,無法編輯,除非擦除文字,重新繪製。沒有充分的理由,最好使用普通的HTML元素,否則一定不要在canvas中建立文字。 context.fillText(text,x,y); 引數x,y表示文字原
css DIV中文字換行顯示
區別 white-space:normal; word-break:break-all; word-wrap:break-word; 新增上上邊的三句就可以換行 這三句重點在於:word-break與word-wrap a:word-break 屬性規定自
RichTextBox文字換行
RichTextBox顯示多行文字就得把它的Multiline屬性設定為true。 直接加一個換行符"\n": RichTextBox1.Text = "First Line\nSecond Line\nThird Line"; 顯示的結果(沒有換行)為"First LineSecond L
UITextView 文字換行
I need to indicated a 'new line' in a string in an XML file I'm loading. If I hard code the string: myTextView.text =[NSString stringWith
mysql servlet呼叫插入帶有格式的大文字換行符無效的問題
做一個圖書管理系統,需要將圖書目錄存在伺服器的資料庫中,然後再安卓客戶端中呼叫資料並顯示,一開始直接將大文字存成Varchar格式,發現這個格式存的文字似乎都沒有格式,換行符都沒有作用。後來查資料發現應該存成text格式。但是存成text格式以後換行符依然無效,組後通過sq
《CSS3實戰》筆記--溢位文字省略:text-overflow和文字換行顯示:word-wrop
通過閱讀和學習書籍《CSS3實戰》總結 《CSS3實戰》/成林著.—北京機械工業出版社2011.5 語法: text-overflow:clip | ellipsis | ellipsis-word 取值簡單說明: clip屬
Objective-C文字換行方式(解決英文在行末時的換行問題)
我們在做文字資訊展示的時候會遇到這種情況:中文+英文(數字),當英文或者數字在行末並且過長的時候,這種情況下系統會預設把整個英文換到下一行展示。這樣就會造成上一行顯示不滿的情況。 如果是UILabel的話直接設定lineBreakMode屬性即可: la
WPF 文字換行TextWrapping 顯示不全用省略號TextTrimming 顯示不全彈提示內容ToolTip
aml aaa esp tails ipc tool except idt else 原文:WPF 文字換行TextWrapping 顯示不全用省略號TextTrimming 顯示不全彈提示內容ToolTip
css 多行文字換行
每次做專案 都能碰到文字換行 尤其是標題和名稱 ,都得百度一下,今天特意記下來 今天主題是超長英文文字自動換行word-wrap的使用,在介紹這個屬性的同時,我還把word-break和white-space兩個屬性一起放進來介紹,因為這幾個屬性常給我平時的製
通過html5 canvas繪製時鐘
最近一直在學習html5,學到了html5的canvas標籤,這個畫布真的是很強大,它有對應的javascript的api的支援,你可以在這個標籤裡面繪製任意的圖形,你也可以把圖片放在裡面,能夠做出很炫的效果。 言歸正傳,廢話不多說,首先,html,只一句