濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > HTML5 Canvas的常用線條屬性值總結(jié)

HTML5 Canvas的常用線條屬性值總結(jié)

熱門標(biāo)簽:阜陽(yáng)企業(yè)外呼系統(tǒng) 呼和浩特外呼電銷系統(tǒng)排名 南通數(shù)據(jù)外呼系統(tǒng)推廣 邢臺(tái)縣地圖標(biāo)注app 外呼線穩(wěn)定線路 外呼系統(tǒng)電話怎么投訴 申請(qǐng)400電話流程簡(jiǎn)介 地圖標(biāo)注位置能賺錢嗎 pageadm實(shí)現(xiàn)地圖標(biāo)注

線條屬性概述
線條的屬性共有以下四個(gè):
1、lineCap屬性
lineCap 定義上下文中線的端點(diǎn),可以有以下 3 個(gè)值。

butt:默認(rèn)值,端點(diǎn)是垂直于線段邊緣的平直邊緣。
round:端點(diǎn)是在線段邊緣處以線寬為直徑的半圓。
square:端點(diǎn)是在選段邊緣處以線寬為長(zhǎng)、以一半線寬為寬的矩形。

2、 lineJoin屬性
lineJoin 定義兩條線相交產(chǎn)生的拐角,可將其稱為連接。在連接處創(chuàng)建一個(gè)填充三角形,可以使用 lineJoin 設(shè)置它的基本屬性。

miter:默認(rèn)值,在連接處邊緣延長(zhǎng)相接。miterLimit 是角長(zhǎng)和線寬所允許的最大比例(默認(rèn)是 10)。
bevel:連接處是一個(gè)對(duì)角線斜角。
round:連接處是一個(gè)圓。

3、線寬
lineWidth 定義線的寬度(默認(rèn)值為 1.0)。


4、筆觸樣式
strokeStyle 定義線和形狀邊框的顏色和樣式。
后面兩個(gè)前面已經(jīng)說(shuō)過(guò)了,這里我們著重來(lái)看看前兩個(gè)屬性。
線條的帽子lineCap

廢話不多說(shuō),直接上代碼看效果。

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. <!DOCTYPE html>   
  2. <html lang="zh">   
  3. <head>   
  4.     <meta charset="UTF-8">   
  5.     <title>線條的帽子</title>   
  6. </head>   
  7. <body>   
  8. <div id="canvas-warp">   
  9.     <canvas id="canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
  10.         你的瀏覽器居然不支持Canvas?!趕快換一個(gè)吧?。?  
  11.     </canvas>   
  12. </div>   
  13.   
  14. <script>   
  15.     window.onload = function(){   
  16.         var canvas = document.getElementById("canvas");   
  17.         canvas.width = 800;   
  18.         canvas.height = 600;   
  19.         var context = canvas.getContext("2d");   
  20.   
  21.         context.lineWidth = 50;   
  22.         context.strokeStyle = "#1BAAAA";   
  23.   
  24.         context.beginPath();   
  25.         context.moveTo(100,100);   
  26.         context.lineTo(700,100);   
  27.         context.lineCap = "butt";   
  28.         context.stroke();   
  29.   
  30.         context.beginPath();   
  31.         context.moveTo(100,300);   
  32.         context.lineTo(700,300);   
  33.         context.lineCap = "round";   
  34.         context.stroke();   
  35.   
  36.         context.beginPath();   
  37.         context.moveTo(100,500);   
  38.         context.lineTo(700,500);   
  39.         context.lineCap = "square";   
  40.         context.stroke();   
  41.   
  42.         //下面畫(huà)兩個(gè)基準(zhǔn)線方便觀察   
  43.         context.lineWidth = 3;   
  44.         context.strokeStyle = "black";   
  45.   
  46.         context.beginPath();   
  47.         context.moveTo(100,0);   
  48.         context.lineTo(100,600);   
  49.         context.moveTo(700,0);   
  50.         context.lineTo(700,600);   
  51.         context.stroke();   
  52.     }   
  53. </script>   
  54. </body>   
  55. </html>   
  56.   

運(yùn)行結(jié)果:

這里我還做了兩條平行線做一下參考,這樣一眼就能看清lineCap三個(gè)值的特點(diǎn)。但要注意,這個(gè)帽子只在線條的端點(diǎn)處起作用,哪怕是折點(diǎn)很多的折線,也僅僅是在開(kāi)始和終止的兩個(gè)端點(diǎn)帶帽子。如果想改變線條折點(diǎn)(兩個(gè)線段的連接處)的樣式,那就要用到下面的lineJoin屬性。
線條的連接lineJoin

廢話不多說(shuō),直接上代碼看效果。這段代碼改自4-3,只是設(shè)置了一下連接的屬性。

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. <!DOCTYPE html>   
  2. <html lang="zh">   
  3. <head>   
  4.     <meta charset="UTF-8">   
  5.     <title>線條的連接</title>   
  6. </head>   
  7. <body>   
  8. <div id="canvas-warp">   
  9.     <canvas id="canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
  10.         你的瀏覽器居然不支持Canvas?!趕快換一個(gè)吧?。?  
  11.     </canvas>   
  12. </div>   
  13.   
  14. <script>   
  15.     window.onload = function(){   
  16.         var canvas = document.getElementById("canvas");   
  17.         canvas.width = 800;   
  18.         canvas.height = 600;   
  19.         var context = canvas.getContext("2d");   
  20.   
  21.         context.beginPath();   
  22.         context.moveTo(100,100);   
  23.         context.lineTo(300,300);   
  24.         context.lineTo(100,500);   
  25.         context.lineJoin = "miter";   
  26.         context.lineWidth = 20;   
  27.         context.strokeStyle = "red";   
  28.         context.stroke();   
  29.   
  30.         context.beginPath();   
  31.         context.moveTo(300,100);   
  32.         context.lineTo(500,300);   
  33.         context.lineTo(300,500);   
  34.         context.lineJoin = "bevel";   
  35.         context.lineWidth = 20;   
  36.         context.strokeStyle = "blue";   
  37.         context.stroke();   
  38.   
  39.         context.beginPath();   
  40.         context.moveTo(500,100);   
  41.         context.lineTo(700,300);   
  42.         context.lineTo(500,500);   
  43.         context.lineJoin = "round";   
  44.         context.lineWidth = 20;   
  45.         context.strokeStyle = "black";   
  46.         context.stroke();   
  47.     }   
  48. </script>   
  49. </body>   
  50. </html>  

運(yùn)行結(jié)果:

看不清的童鞋自己放大網(wǎng)頁(yè)或者自己將代碼的線寬調(diào)寬一點(diǎn)。
這里有一個(gè)很隱蔽的屬性,就是當(dāng)lineJoin設(shè)置為miter時(shí)(默認(rèn)),會(huì)解鎖一個(gè)成績(jī),可以使用miterLimit屬性。
舉個(gè)例子看看。

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. <!DOCTYPE html>   
  2. <html lang="zh">   
  3. <head>   
  4.     <meta charset="UTF-8">   
  5.     <title>miterLimit</title>   
  6. </head>   
  7. <body>   
  8. <div id="canvas-warp">   
  9.     <canvas id="canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
  10.         你的瀏覽器居然不支持Canvas?!趕快換一個(gè)吧?。?  
  11.     </canvas>   
  12. </div>   
  13.   
  14. <script>   
  15.     window.onload = function(){   
  16.         var canvas = document.getElementById("canvas");   
  17.         canvas.width = 800;   
  18.         canvas.height = 600;   
  19.         var context = canvas.getContext("2d");   
  20.   
  21.         context.beginPath();   
  22.         context.moveTo(100,100);   
  23.         context.lineTo(300,300);   
  24.         context.lineTo(100,500);   
  25.         context.lineJoin = "miter";   
  26.         context.miterLimit = 10;   
  27.         context.lineWidth = 5;   
  28.         context.strokeStyle = "red";   
  29.         context.stroke();   
  30.   
  31.         context.beginPath();   
  32.         context.moveTo(300,200);   
  33.         context.lineTo(500,300);   
  34.         context.lineTo(300,400);   
  35.         context.lineJoin = "miter";   
  36.         context.miterLimit = 10;   
  37.         context.lineWidth = 5;   
  38.         context.strokeStyle = "blue";   
  39.         context.stroke();   
  40.   
  41.         context.beginPath();   
  42.         context.moveTo(500,290);   
  43.         context.lineTo(700,300);   
  44.         context.lineTo(500,310);   
  45.         context.lineJoin = "miter";   
  46.         context.miterLimit = 10;   
  47.         context.lineWidth = 5;   
  48.         context.strokeStyle = "black";   
  49.         context.stroke();   
  50.     }   
  51. </script>   
  52. </body>   
  53. </html>  

運(yùn)行結(jié)果:

會(huì)發(fā)現(xiàn),這個(gè)miterLimit規(guī)定了一個(gè)自動(dòng)填充連接點(diǎn)的極限值。如果超過(guò)了這個(gè)值,會(huì)導(dǎo)致lineJoin屬性失效,會(huì)從 miter 變成 bevel。可以看出來(lái),這個(gè)值和線寬以及夾角有關(guān),具體是啥關(guān)系??聪聢D。

可以看到,關(guān)系有點(diǎn)復(fù)雜。有興趣的小伙伴可以推導(dǎo)一下這個(gè)值與線寬、夾角的函數(shù)關(guān)系。其實(shí),大多時(shí)候用不到這個(gè)隱藏屬性,即便用到了也是憑感覺(jué)寫(xiě)個(gè)數(shù)然后不滿意再調(diào)試即可。
高級(jí)線段繪制舉例
實(shí)際在畫(huà)布上繪制線段時(shí),會(huì)有一些奇怪的現(xiàn)象發(fā)生,這里融合本節(jié)課學(xué)到的兩個(gè)線段的屬性講解一個(gè)。

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. <!DOCTYPE html>   
  2. <html lang="zh">   
  3. <head>   
  4.     <meta charset="UTF-8">   
  5.     <title>miterLimit</title>   
  6. </head>   
  7. <body>   
  8. <div id="canvas-warp">   
  9.     <canvas id="canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
  10.         你的瀏覽器居然不支持Canvas?!趕快換一個(gè)吧??!   
  11.     </canvas>   
  12. </div>   
  13.   
  14. <script>   
  15.     window.onload = function(){   
  16.         var canvas = document.getElementById("canvas");   
  17.         canvas.width = 800;   
  18.         canvas.height = 600;   
  19.         var context = canvas.getContext("2d");   
  20.   
  21.         // 實(shí)例1: 圓形端點(diǎn),斜角連接,在畫(huà)布左上角   
  22.         context.beginPath();   
  23.         context.moveTo(0,0);   
  24.         context.lineTo(180,0);   
  25.         context.lineTo(180,180);   
  26.         context.lineJoin = 'bevel';   
  27.         context.lineCap = 'round';   
  28.         context.lineWidth = 10;   
  29.         context.strokeStyle = "red";   
  30.         context.stroke();   
  31.   
  32.         // 實(shí)例2: 圓形端點(diǎn),斜角連接,不在畫(huà)布左上角   
  33.         context.beginPath();   
  34.         context.moveTo(300,200);   
  35.         context.lineTo(480,200);   
  36.         context.lineTo(480,380);   
  37.         context.lineJoin = 'bevel';   
  38.         context.lineCap = 'round';   
  39.         context.lineWidth = 10;   
  40.         context.strokeStyle = "blue";   
  41.         context.stroke();   
  42.   
  43.         // 實(shí)例3: 平直端點(diǎn),圓形連接,不在畫(huà)布左上角   
  44.         context.beginPath();   
  45.         context.moveTo(600,400);   
  46.         context.lineTo(780,400);   
  47.         context.lineTo(780,580);   
  48.         context.lineJoin = 'round';   
  49.         context.lineCap = 'butt';   
  50.         context.lineWidth = 10;   
  51.         context.strokeStyle = "black";   
  52.         context.stroke();   
  53.     }   
  54. </script>   
  55. </body>   
  56. </html>  

運(yùn)行結(jié)果:

這 3 個(gè)線段和連接的實(shí)例有助于說(shuō)明在畫(huà)布上繪制線段時(shí)不同屬性的組合。
實(shí)例 1 嘗試從畫(huà)布左上角開(kāi)始繪制,結(jié)果發(fā)生了一個(gè)奇怪的現(xiàn)象。Canvas 路徑在 x 軸和 y 軸方向上都繪制到了起點(diǎn)的外側(cè)。由于這個(gè)原因?qū)嵗?1 上面的線看起來(lái)要細(xì)些。另外,左上角水平部分中圓形端點(diǎn)也無(wú)法看到,它們都被繪制到了屏幕之外的負(fù)值坐標(biāo)區(qū)域。此外,lineJoin 定義的對(duì)角線斜角也沒(méi)有繪出。
實(shí)例 2 調(diào)整了例子 1 中出現(xiàn)的問(wèn)題,將起始點(diǎn)離開(kāi)左上角。這樣就繪制出了完整的水平線,并且圓形 lineCap 和斜角 lineJoin 都被繪制出來(lái)了。
實(shí)例 3 顯示了去掉 lineCap 設(shè)置后的默認(rèn)端點(diǎn)效果,并且將 lineJoin 調(diào)整為圓角。

標(biāo)簽:撫順 辛集 德州 內(nèi)蒙古 黃山 蚌埠 楊凌 鶴崗

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《HTML5 Canvas的常用線條屬性值總結(jié)》,本文關(guān)鍵詞  HTML5,Canvas,的,常用,線條,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《HTML5 Canvas的常用線條屬性值總結(jié)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于HTML5 Canvas的常用線條屬性值總結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    鄄城县| 桃源县| 永年县| 遵义市| 雷波县| 阳泉市| 高密市| 资兴市| 来宾市| 商丘市| 资溪县| 宁德市| 涞源县| 柯坪县| 泸州市| 西青区| 赤壁市| 九江市| 河源市| 高阳县| 广德县| 大渡口区| 莱芜市| 瓮安县| 石泉县| 区。| 六盘水市| 甘德县| 三穗县| 云阳县| 荔浦县| 通许县| 永康市| 惠安县| 无极县| 湖南省| 呼和浩特市| 灌云县| 楚雄市| 长兴县| 郧西县|