第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

文本水平對齊方式

1. 前言

文本對齊方式針對的是我們前兩節(jié)講的繪制文本的方法,文本對齊方式分為水平對齊和垂直對齊兩種,本小節(jié)我們學(xué)習(xí)水平對齊方式的設(shè)定。

2. 水平對齊

我們前兩節(jié)在學(xué)習(xí)繪制文本的時候,都是設(shè)定了一行文字和一對坐標(biāo)點后開始繪制的,繪制的文本也是從我們給定的點開始。當(dāng)然,canvas 也是支持將我們給定的點作為單行文本的中點或者終點,這就要用到文本水平對齊屬性:textAlign了。

我們看一個例子:

實例演示
預(yù)覽 復(fù)制
復(fù)制成功!
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>慕課網(wǎng)Wiki</title>
    <style>
        #imooc{
            border:1px solid #ccc;
        }
    </style>
</head>
<body>
    <canvas id="imooc">您的瀏覽器不支持 HTML5 canvas 標(biāo)簽</canvas>
    <script>
		const canvas = document.getElementById('imooc');
		const ctx = canvas.getContext('2d');
		
		ctx.font="20px 微軟雅黑"
		
		ctx.textAlign = "left" //設(shè)置繪制文本的給定點為文本左側(cè)
		ctx.fillText("慕課Wiki", 150, 30)
		
		
		ctx.textAlign = "center" //設(shè)置繪制文本的給定點為文本中間
		ctx.fillText("慕課Wiki", 150, 80)
		
		
		ctx.textAlign = "right" //設(shè)置繪制文本的給定點為文本右側(cè)
		ctx.fillText("慕課Wiki", 150, 130)
		
		//繪制中間參考線
		ctx.beginPath()
		ctx.strokeStyle="#ccc";
		ctx.moveTo(150,0);
		ctx.lineTo(150,150);
		ctx.stroke();
	
	</script>
<body>
</html>
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結(jié)果:

我們將上面例子的主要內(nèi)容拆分講解:

  1. 設(shè)置字體大小以及字體樣式,font 屬性屬于全局屬性,設(shè)定一次,后面所有繪制都會受到影響。

    ctx.font="20px 微軟雅黑"
    
  2. 設(shè)定水平對齊方式為左對齊,即以我們給定的錨點 (150, 30) 為文本起點,left 值也是默認(rèn)值。

    ctx.textAlign = "left"
    ctx.fillText("慕課Wiki", 150, 30)
    
  3. 設(shè)定水平對齊方式為居中對齊,即以我們給定的錨點 (150, 80) 為文本中點。

    ctx.textAlign = "center"
    ctx.fillText("慕課Wiki", 150, 80)
    
  4. 設(shè)定水平對齊方式為右對齊,即以我們給定的錨點 (150, 130) 為文本最右點。

    ctx.textAlign = "right"
    ctx.fillText("慕課Wiki", 150, 130)
    
  5. 繪制一條輔助參考線。

    ctx.beginPath()
     ctx.strokeStyle="#ccc";
     ctx.moveTo(150,0);
     ctx.lineTo(150,150);
     ctx.stroke();
    

3.水平對齊進(jìn)階學(xué)習(xí)

上面我們列舉了 textAlign 的三個值,left,centerright,其實 textAlign 屬性還有兩個值:startend,這兩個值在默認(rèn)情況下和 left、right 的作用完全一樣,即:start 等同于 left,end 等同于 right,那么問題來了,start 和 left 在什么情況下表現(xiàn)不相同呢?

要想回答上面的問題,我們需要先弄明白 瀏覽器的文本方向。

我們使用的瀏覽器默認(rèn)的文本方向都是從左向右的,即 ltr 模式,這和我們的閱讀習(xí)慣是相同的(ltr = left to right),但是瀏覽器還提供了一種閱讀方式,rtl 模式,就是從右向左的閱讀方向。

在瀏覽器 ltr 模式下,也就是正常模式下,start 的作用和 left 是相同的,end 的作用和 right 的作用是相同的。

如果瀏覽器設(shè)置了文本方向從右向左,即 rtl 模式,那么對齊方式剛好相反,start 的作用和 right 是相同的, end 的表現(xiàn)和 left 的表現(xiàn)是相同的。

canvas也為我們提供了修改畫布文本方向的屬性 direction,該屬性可以修改畫布的文本方向,該屬性主要影響 start 和 end 的表現(xiàn)。

direction 屬性還未被納入標(biāo)準(zhǔn)文檔,所以兼容性很差,平時不建議使用 。

我們看一個案例,請使用最新 chrome 瀏覽器查看本案例。

實例演示
預(yù)覽 復(fù)制
復(fù)制成功!
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>慕課網(wǎng)Wiki</title>
    <style>
        #imooc{
            border:1px solid #ccc;
        }
    </style>
</head>
<body>
    <canvas id="imooc">您的瀏覽器不支持 HTML5 canvas 標(biāo)簽</canvas>
    <script>
		const canvas = document.getElementById('imooc');
		canvas.width=300;
		canvas.height=300;
		const ctx = canvas.getContext('2d');
		
		
		ctx.fillStyle = "#456795"
		ctx.font="16px 微軟雅黑"
		ctx.textAlign = "left"
		ctx.fillText("慕課Wiki left", 150, 30)
		ctx.textAlign = "center"
		ctx.fillText("慕課Wiki center", 150, 60)
		ctx.textAlign = "right"
		ctx.fillText("慕課Wiki right", 150, 90)
		ctx.textAlign = "start"
		ctx.fillText("慕課Wiki start", 150, 120)
		ctx.textAlign = "end"
		ctx.fillText("慕課Wiki end", 150, 150)
		
	
		ctx.direction = "rtl";	 //設(shè)定畫布的渲染方向
		
		ctx.fillStyle = "red"
		ctx.font="16px 微軟雅黑"
		ctx.textAlign = "left"
		ctx.fillText("慕課Wiki left", 150, 180)
		ctx.textAlign = "center"
		ctx.fillText("慕課Wiki center", 150, 210)
		ctx.textAlign = "right"
		ctx.fillText("慕課Wiki right", 150, 240)
		ctx.textAlign = "start"
		ctx.fillText("慕課Wiki start", 150, 270)
		ctx.textAlign = "end"
		ctx.fillText("慕課Wiki end", 150, 300)
		
		//繪制中間參考線
		ctx.beginPath()
		ctx.strokeStyle="#ccc";
		ctx.moveTo(150,0);
		ctx.lineTo(150,300);
		ctx.stroke();
		
		//繪制中間參考線
		ctx.beginPath()
		ctx.strokeStyle="#ccc";
		ctx.moveTo(0,150);
		ctx.lineTo(300,150);
		ctx.stroke();
	
	</script>
<body>
</html>
運行案例 點擊 "運行案例" 可查看在線運行效果

運行結(jié)果:

我們可以從運行結(jié)果中看出,當(dāng)設(shè)定了畫布的文本方向為 rtl 后,再繪制的紅色文字,只有 start 和 end 的位置切換了,left、right、center都沒有受到影響。

4. 屬性整理

本小節(jié)我們學(xué)習(xí)了 textAlign 屬性和 direction 屬性 , 它們是 canvas 2D API 提供的設(shè)置文本對齊方式的屬性。

4.1 對齊設(shè)置 textAlign

textAlign 說明

  • textAlign 是 canvas 2D API 提供的設(shè)置文本對齊方式的屬性。
  • 默認(rèn)值:start。

特別說明:
該屬性是針對 fillTextstrokeText 方法的 X 的值,所以如果 textAlign = “center”,那么該文本將畫在 X - 50% * width 的位置。

語法:

ctx.textAlign = value;

取值說明:

value可取如下值:

value 說明 特別說明
left 文本左對齊 對齊方式是針對 fillTextstrokeText 方法的 X 的值。
right 文本右對齊 對齊方式是針對 fillTextstrokeText 方法的 X 的值。
center 文本居中對齊 對齊方式是針對 fillTextstrokeText 方法的 X 的值。
start 文本對齊界線開始的地方,默認(rèn)左對齊 搭配 direction 屬性使用,ltr:從左向右,rtl:從右向左。
end 文本對齊界線結(jié)束的地方,默認(rèn)右對齊 搭配 direction 屬性使用,ltr:從左向右,rtl:從右向左。

補充

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

4.2 文本方向 direction

direction 說明

  • direction 是 canvas 2D API 提供的設(shè)置文本方向的屬性。
  • 默認(rèn)值:ltr。

語法:

ctx.direction = value;

取值說明:

value可取如下值:

value 說明 特別說明
ltr 畫布文本從左向右排布 默認(rèn)值。
rtl 畫布文本從右向左排布 兼容性較差。

5. 總結(jié)

本小節(jié)我們主要學(xué)習(xí)了利用 textAlign 設(shè)定文本對齊方式以及 start 和 end 在文本方向不同時的表現(xiàn),下一節(jié)我們學(xué)習(xí)文本的垂直對齊。