国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

利用 Canvas 繪畫(huà)一個(gè)未閉合的帶進(jìn)度條的圓環(huán)

JeOam / 2617人閱讀

摘要:最終效果圖一定義變量定義半徑,定義圓環(huán)厚度,定義圓心位置定義默認(rèn)填充顏色二畫(huà)第一個(gè)圓弧注意這個(gè)方法,生成路徑的第一步。本質(zhì)上,路徑是由很多子路徑構(gòu)成,這些子路徑都是在一個(gè)列表中,所有的子路徑線弧形等等構(gòu)成圖形。

最終效果圖

一、定義變量

定義半徑,定義圓環(huán)厚度,定義圓心位置、定義默認(rèn)填充顏色

let radius = 75
let thickness= 10
let innerRadius = radius - thickness
let x = 75
let y = 75
var canvas = document.getElementById("tutorial");
var ctx = canvas.getContext("2d");
ctx.fillStyle = "#f2d7d7";
二、畫(huà)第一個(gè)圓弧
ctx.beginPath();
ctx.arc(x, y, radius, Math.PI * 1.5, Math.PI)

注意 beginPath() 這個(gè)方法,生成路徑的第一步。本質(zhì)上,路徑是由很多子路徑構(gòu)成,這些子路徑都是在一個(gè)列表中,所有的子路徑(線、弧形、等等)構(gòu)成圖形。而每次這個(gè)方法調(diào)用之后,列表清空重置,然后我們就可以重新繪制新的圖形。
也就是說(shuō),這個(gè)方法可以用來(lái)給 Canvas圖像 分組,繪制新的圖形如果不調(diào)用此方法,那么新的圖形會(huì)和前面的圖形連接在一起

三、畫(huà)第一個(gè)連接處
ctx.quadraticCurveTo((x - innerRadius) - thickness / 2, y - thickness, x - innerRadius, y)

連接外是用二次貝塞爾曲線來(lái)畫(huà)的,Canvas的 quadraticCurveTo(cp1x, cp1y, x, y) 方法接受4個(gè)參數(shù),第一、二個(gè)參數(shù)為控制點(diǎn),第三、四個(gè)參數(shù)為結(jié)束點(diǎn)官方文檔
只需算出控制點(diǎn)和結(jié)束點(diǎn),就可以畫(huà)出一個(gè)圓弧

四、畫(huà)第二個(gè)圓弧
 ctx.arc(x, y, innerRadius, Math.PI, Math.PI * 1.5, true)

注意方法后面最后一個(gè)參數(shù),設(shè)置為true,代表逆時(shí)針繪制(默認(rèn)是順時(shí)針)

五、畫(huà)第二個(gè)連接處
ctx.quadraticCurveTo(y - thickness, (x - innerRadius) - thickness / 2, x, y - innerRadius - thickness)

這一步其實(shí)和第三步相差不大,簡(jiǎn)單的調(diào)換了下參數(shù)位置

六、填充
 ctx.fill();

至此,一個(gè)簡(jiǎn)單的未閉合的圓環(huán)就完成了

畫(huà)第二個(gè)進(jìn)度條圓環(huán) 七、初始化
ctx.beginPath();
ctx.fillStyle = "#e87c7c";

beginPath 表示繪制新的圖形,如果不調(diào)用此方法,那后面畫(huà)的圖形會(huì)和前面畫(huà)的圖形連在一起

八、繪制第二個(gè)進(jìn)度條圓環(huán)
ctx.beginPath();
ctx.fillStyle = "#e87c7c";
ctx.arc(x, y, radius, Math.PI * 1.5, Math.PI * 2)
ctx.quadraticCurveTo((x + innerRadius) + thickness / 2, y + thickness, x + innerRadius, y)
ctx.arc(x, y, innerRadius, Math.PI * 2, Math.PI * 1.5, true)
ctx.quadraticCurveTo(y - thickness, (x - innerRadius) - thickness / 2, x, y - innerRadius - thickness)

ctx.fill();

由于和第一個(gè)圓環(huán)繪制方式一模一樣,就不在重復(fù)了,區(qū)別僅僅是圓的弧度

九、旋轉(zhuǎn) Canvas
transform: rotate(-135deg);

由于css的旋轉(zhuǎn)比較方便,也省去了角度的計(jì)算,所以本人使用的是css的transform來(lái)旋轉(zhuǎn)的。當(dāng)然 Canvas 也提供了旋轉(zhuǎn)的方法

完整代碼




    
    
    
    canvas
    



    
100 服務(wù)分

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/116114.html

相關(guān)文章

  • 利用 Canvas 繪畫(huà)一個(gè)閉合的帶進(jìn)度條的圓環(huán)

    摘要:最終效果圖一定義變量定義半徑,定義圓環(huán)厚度,定義圓心位置定義默認(rèn)填充顏色二畫(huà)第一個(gè)圓弧注意這個(gè)方法,生成路徑的第一步。本質(zhì)上,路徑是由很多子路徑構(gòu)成,這些子路徑都是在一個(gè)列表中,所有的子路徑線弧形等等構(gòu)成圖形。 最終效果圖 showImg(https://segmentfault.com/img/bVbvvTW); 一、定義變量 定義半徑,定義圓環(huán)厚度,定義圓心位置、定義默認(rèn)填充顏色 ...

    mgckid 評(píng)論0 收藏0
  • 實(shí)現(xiàn)環(huán)形進(jìn)度條的幾種方法

    摘要:環(huán)形進(jìn)度條的問(wèn)題,網(wǎng)上有很多的,也有各種不同的實(shí)現(xiàn)方式,很棒的實(shí)現(xiàn)也有很多,我這自己做一下一方面是想開(kāi)闊一下自己的思路,一方面好久沒(méi)看和的東西了,基礎(chǔ)的拿來(lái)熟悉下。 環(huán)形進(jìn)度條的問(wèn)題,網(wǎng)上有很多的demo,也有各種不同的實(shí)現(xiàn)方式,很棒的實(shí)現(xiàn)也有很多,我這自己做一下一方面是想開(kāi)闊一下自己的思路,一方面好久沒(méi)看SVG和Canvas的東西了,基礎(chǔ)的拿來(lái)熟悉下。 DIV + CSS3 這個(gè)是最...

    Scliang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<