Canvas 文本繪制


文本繪制

Canvas 2D API 提供了兩種繪制文本的方法和一個檢查字體寬度的方法

方法變量說明

變量名 類型 是否必須 說明
text string 待填充文字
x Number 指定左上角位置的X坐標
y Number 指定左上角位置的Y坐標
maxWidth Number 繪制的最大寬度,如果文本沒有達到最大寬度大小,按正常顯示,如果超過了設置的最大寬度,則會壓縮文本寬度到設定值

填充文本

填充文本 語法

在指定的位置填充文本,可選繪制的最大寬度
即繪制的文本為實心

fillText(text, x, y [, maxWidth])

填充文本 示例

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>慕課網Wiki</title>
</head>
<body>
	
	<canvas id="imooc" width="350" height="200" style="border:1px solid #f2180d;">
		您的瀏覽器不支持 HTML5 canvas 標簽。
	</canvas>
	
	<script>
		var c=document.getElementById("imooc");
		var ctx=c.getContext("2d");
		//沒有配置最大寬度
		ctx.fillText("Hello IMooc",10,50);
	</script>
</body>
</html>

空心文本

繪制空心文本 語法

在指定的(x,y)位置繪制文本邊框,可選繪制的最大寬度
即繪制的文本為空心

strokeText(text, x, y [, maxWidth])

繪制空心文本 示例

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>慕課網Wiki</title>
</head>
<body>
	
	<canvas id="imooc" width="350" height="200" style="border:1px solid #f2180d;">
		您的瀏覽器不支持 HTML5 canvas 標簽。
	</canvas>
	
	<script>
		var c=document.getElementById("imooc");
		var ctx=c.getContext("2d");
		//傳入最大寬度
		ctx.strokeText("Hello IMooc",10,50, 100);
	</script>
</body>
</html>

檢查文本寬度

檢查文本寬度 語法

此方法返回一個被測量文本 TextMetrics 對象
此對象包含了例如 text文字所占寬度width、文本矩形邊界右側距離等多個屬性

measureText(text)
檢查文本寬度 示例

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>慕課網Wiki</title>
</head>
<body>
	
	<canvas id="imooc" width="350" height="200" style="border:1px solid #f2180d;">
		您的瀏覽器不支持 HTML5 canvas 標簽。
	</canvas>
	
	<script>
		var c = document.getElementById("imooc");
		var ctx = c.getContext("2d");
		var txt = "Hello IMooc"
		// measureText不會渲染canvas,知識返回了一個包含多個屬性的對象
		var textMetricsObj = ctx.measureText(txt)
		alert(textMetricsObj.width)
	</script>
</body>
</html>

文本樣式

Canvas 2D API文本繪制提供了四個設置文本樣式的屬性,我們一個一個來看

字體設置 .font

字體設置 .font 說明

  • .font 是 Canvas 2D API 描述繪制文字時,為當前字體樣式設置的屬性。
  • 使用和 CSS font 規范相同的字符串值。
  • 默認值: 10px sans-serif

語法

ctx.font = value;

參數說明

變量名 類型 是否必須 說明
value string 符合CSS中font的語法字符串

字體設置 示例

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>慕課網Wiki</title>
</head>
<body>
	
	<canvas id="imooc" width="350" height="200" style="border:1px solid #f2180d;">
		您的瀏覽器不支持 HTML5 canvas 標簽。
	</canvas>
	
	<script>
		var c=document.getElementById("imooc");
		var ctx=c.getContext("2d");
		//設置了字體大小,和字體樣式
		ctx.font="30px Microsoft YaHei,SimSun,Arial";
		ctx.fillText("Hello IMooc",10,50);
	</script>
</body>
</html>

對齊設置 .textAlign

對齊設置 .textAlign 說明

  • .textAlign 是 Canvas 2D API 提供的設置文本對其方式的屬性。
  • 默認值: start

特別說明
該對齊方式是針對 .fillText/.strokeText 方法的 X 的值。所以如果 textAlign="center",那么該文本將畫在 x-50%*width的位置

語法

ctx.textAlign = value;

value值說明

value可取如下值

value 說明 特別說明
left 文本左對齊 對齊方式是針對 .fillText/.strokeText 方法的 X 的值
right 文本右對齊 對齊方式是針對 .fillText/.strokeText 方法的 X 的值
center 文本居中對齊 對齊方式是針對 .fillText/.strokeText 方法的 X 的值
start 文本對齊界線開始的地方,默認左對齊 搭配direction屬性使用,ltr:從左向右,rtl:從右向左
end 文本對齊界線結束的地方,默認右對齊 搭配direction屬性使用,ltr:從左向右,rtl:從右向左.

補充

  1. 如果你想讓文本在整個canvas居中,只需要將fillText的x值設置成canvas的寬度的一半,.textAlign值設置成center。
  2. start和stop默認情況下是等同於left和right的。如果設置direction的值為:rtl,則剛好相反
  3. direction屬性還未被納入標准文檔,兼容性很差, 所以針對start和end的使用參照left和right

對齊設置 示例

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>慕課網Wiki</title>
</head>
<body>
	
	<canvas id="imooc" width="350" height="200" style="border:1px solid #f2180d;">
		您的瀏覽器不支持 HTML5 canvas 標簽。
	</canvas>
	
	<script>
		var c=document.getElementById("imooc");
		var ctx=c.getContext("2d");
		//X的值為175,在畫布正中間
		ctx.font="30px Microsoft YaHei,SimSun,Arial";
		ctx.textAlign="left"
		ctx.fillText("Left Imooc",175,50);
		ctx.textAlign="center"
		ctx.fillText("Center IMooc",175,100);
		ctx.textAlign="right"
		ctx.fillText("Right IMooc",175,150);
	</script>
</body>
</html>

垂直對其設置 .textBaseline

垂直對其設置 .textBaseline 說明

  • .textBaseline 是 Canvas 2D API 提供的文本垂直對齊的屬性(基線對齊屬性)。
  • 默認值: alphabetic

語法

ctx.textBaseline = value;

value值說明

value可取如下值

value 說明 特別說明
top 文本基線在文本塊的頂部
hanging 文本基線是懸掛基線
middle 文本基線在文本塊的中間
alphabetic 文本基線是標准的字母基線。
ideographic 文字基線是表意字基線 如果字符本身超出了alphabetic 基線,那么ideograhpic基線位置在字符本身的底部。
bottom 文本基線在文本塊的底部 與 ideographic 基線的區別在於 ideographic 基線不需要考慮下行字母。

補充

  1. 如果你想讓文本在整個canvas居中,只需要將fillText的x值設置成canvas的寬度的一半,.textAlign值設置成center。
  2. start和stop默認情況下是等同於left和right的。如果設置direction的值為:rtl,則剛好相反
  3. direction屬性還未被納入標准文檔,所以兼容性很差, 不建議使用

字體設置 示例

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>慕課網Wiki</title>
</head>
<body>
	
	<canvas id="imooc" width="550" height="200" style="border:1px solid #f2180d;">
		您的瀏覽器不支持 HTML5 canvas 標簽。
	</canvas>
	
	<script>
		var c=document.getElementById("imooc");
		var ctx=c.getContext("2d");
		ctx.font="30px Microsoft YaHei,SimSun,Arial";
		
		//設置了不同垂直對齊方式
		ctx.textBaseline="top"
		ctx.fillText("TOPtop",0,50, 100);
		ctx.textBaseline="hanging"
		ctx.fillText("HANGING hanging",150,50, 100);
		ctx.textBaseline="middle"
		ctx.fillText("MIDDLEmiddle",305,50);
	</script>
</body>
</html>

文本方向設置 .direction

文本方向設置 .direction 說明

  • .textBaseline 是 Canvas 2D API 提供的文本垂直對齊的屬性(基線對齊屬性)。
  • 默認值: inherit

語法

ctx.textBaseline = value;

value值說明

value可取如下值

value 說明 特別說明
ltr 文本方向從左向右。 left to right 縮寫
rtl 文本方向從右向左。 right to left 縮寫
inherit 根據情況繼承 canvas 元素或者 Document 默認從左向右

補充

  1. direction屬性還未被納入標准文檔,所以兼容性很差,不建議使用

字體設置 示例

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>慕課網Wiki</title>
</head>
<body>
	
	<canvas id="imooc" width="550" height="200" style="border:1px solid #f2180d;">
		您的瀏覽器不支持 HTML5 canvas 標簽。
	</canvas>
	
	<script>
		var c=document.getElementById("imooc");
		var ctx=c.getContext("2d");
		ctx.font="30px Microsoft YaHei,SimSun,Arial";
		
		//設置了不同垂直對齊方式
		ctx.direction = "ltr";		
		ctx.fillText("Hello IMooc",305,50);
	</script>
</body>
</html>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM