站長資訊網
        最全最豐富的資訊網站

        canvas中線段的端點與連接點詳解

        在Canvas中,線段也是路徑中的一種,被稱之為線性路徑。在Canvas中繪制線性路徑主要用到moveTo(x,y)、lineTo(x,y)和stroke()幾個方法,讓我們來回憶下線寬的用法。

        function drawLine(){      cxt.lineWidth = 3;      cxt.moveTo(10, 10);      cxt.lineTo(120, 100);      cxt.stroke();  }

        上面的代碼我們就可以繪制一條寬度為3像素的線段。

        上一章我們還提到線寬與像素邊界的內容主要為:
        如果你在某2個像素的邊界處繪制一條1像素寬的線段,那么該線段實際會占據2個像素的寬度;

        因為當你在像素邊界處繪制一條1像素寬度的垂直線段時,canvas的繪圖環境對象會試著將半個像素畫在邊界中線的右邊,將另外半個像素畫在邊界中線的左邊。

        然而,在一個整像素的范圍內繪制半個像素寬的線段是不可能的,所以在左右兩個方向上的半個像素都被擴展為1個像素。(具體內容可參考第三章內容);

        今天這章內容我們用來看看線段的其它屬性 lineCap,lineJoin。

        線段的端點(lineCap)

        在繪制線段時,你可以控制線段的端點,也就是 “線帽” (lineCap)的樣子,在Canvas的繪圖環境對象中,控制線段端點的屬性正好也叫作lineCap。
        線段端點的樣式有三個值,分別是butt, roundm, square, 默認是為butt; round與square 都會給線段的端點畫上一頂帽子。

        • butt:線段端點的默認樣式

        • round:在端點處添加一個半圓,其半徑是線寬的一半。

        • square: 在端點處添加一個矩形,長度與線寬一致,寬度是線寬的一半。

        看到這里貌似我們也看不出什么名堂。那我們就先繪制出來,你就會瞬間明白了。要不怎么都說要數據可視化呢!

        function lineCap(){      cxt.lineWidth = 20;      cxt.strokeStyle = '#16a085';        cxt.beginPath();      cxt.lineCap = 'butt';      cxt.moveTo(20, 20);      cxt.lineTo(300, 20);      cxt.stroke();        cxt.beginPath();      cxt.lineCap = 'round';      cxt.moveTo(20, 100);      cxt.lineTo(300, 100);      cxt.stroke();        cxt.beginPath();      cxt.lineCap = 'square';      cxt.moveTo(20, 180);      cxt.lineTo(300, 180);      cxt.stroke();  }

        canvas中線段的端點與連接點詳解

        看到上面的圖片是不是瞬間就知道了lineCap的屬性值的樣式,是不是也感受到了可視化的魅力。

        線段的連接點(lineJoin)

        在繪制線段或者矩形時,我們可以控制兩條線段連接處的拐點,也就是線段的連接點。
        在canvas繪圖環境中線段的連接點是由 lineJoin屬性控制的。
        lineJoin屬性也有三個值分別為: round, bevel, miter,默認是miter。

        • round:額外填充一個圓弧,圓弧為兩條線段拐角的外邊緣的點用圓弧連接而成,

        • bevel:額外填充一個三角形,三角形為兩條線段拐角的外邊緣的點用直線連接而成。

        • miter:額外填充一個多邊形,多邊形為兩條線段拐角外邊緣的延長線的交點形成。

        同樣我們繪制出來看一下

        function lineCap(){      cxt.lineWidth = 20;      cxt.strokeStyle = '#16a085';        cxt.beginPath();      cxt.lineJoin = 'round';      cxt.moveTo(20, 20);      cxt.lineTo(300, 20);      cxt.lineTo(300, 60);      cxt.stroke();        cxt.beginPath();      cxt.lineJoin = 'bevel';      cxt.moveTo(20, 100);      cxt.lineTo(300, 100);      cxt.lineTo(300, 140);      cxt.stroke();        cxt.beginPath();      cxt.lineJoin = 'miter';      cxt.moveTo(20, 180);      cxt.lineTo(300, 180);      cxt.lineTo(300, 220);      cxt.stroke();  }

        canvas中線段的端點與連接點詳解

        我們再來看看線段連接點的具體構建方式

        canvas中線段的端點與連接點詳解

        提示

        當我們使用miter樣式來繪制線段的連接點時,我們還可以指定一個miterLimit屬性
        miterLimit: 表示斜接線(miter)的長度與二分之一線寬的比值;

        斜接線的計量方式如下圖

        canvas中線段的端點與連接點詳解

        從圖中我們可以看出,如果兩個線段的夾角很小的話,那么斜接線的長度有可能會變的非常長,它與二分之一線寬的比值就會超出你所指定的miterLimit的屬性值,

        這時候瀏覽器會將以bevel的方式來繪制線段的連接點。

        總結

        Canvas繪圖環境中線段的相關屬性

        屬性 描述 默認值
        lineWidth 以像素為單位的線段寬度 非零的正數 1
        lineCap 繪制線段的端點樣式 butt,round,square butt
        lineJoin 線段連接點的樣式 bevel,round,miter miter
        miterLimit 斜接線與二分之一線寬的比值 非零的正數 10

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 自拍偷自拍亚洲精品情侣| 91精品婷婷国产综合久久| 国产成人精品福利网站在线| 精品综合久久久久久88小说| 91麻豆精品国产自产在线观看一区 | 中文字幕久精品免费视频| 久久夜色精品国产亚洲| 日本内射精品一区二区视频 | 国产精品无码一区二区在线观一| 国产精品美脚玉足脚交欧美| 亚洲欧美精品AAAAAA片| 久久久久国产精品嫩草影院| 亚洲国产成人久久精品动漫| 99精品国产一区二区三区2021 | 黑人巨大精品欧美一区二区| 精品国产欧美另类一区| 国产亚洲色婷婷久久99精品| 亚洲色精品88色婷婷七月丁香| 久久国产精品免费一区| 国产精品亚洲产品一区二区三区| 天天爽夜夜爽精品视频app| 国产精品久久亚洲不卡动漫| 99久久99久久精品免费看蜜桃| 久久99精品久久久久久久不卡| 真实国产乱子伦精品一区二区三区| 日韩精品毛片| 午夜成人精品福利网站在线观看 | 午夜精品美女自拍福到在线| 精品一区二区久久| 国产精品爽黄69天堂a| 国产精品久久久久久福利漫画| 国产精品久久一区二区三区| 国产精品久久久久久搜索| 国产午夜精品理论片久久影视 | 最新精品露脸国产在线| 精品久久久久久无码中文野结衣| 国产精品龙口护士门在线观看| 久久亚洲精品中文字幕三区| 91大神精品全国在线观看| 北条麻妃国产九九九精品视频| 99久久精品费精品国产|