摘要:最終效果圖一定義變量定義半徑,定義圓環(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ì)和前面的圖形連接在一起
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è)圓弧
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) Canvastransform: 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
摘要:最終效果圖一定義變量定義半徑,定義圓環(huán)厚度,定義圓心位置定義默認(rèn)填充顏色二畫(huà)第一個(gè)圓弧注意這個(gè)方法,生成路徑的第一步。本質(zhì)上,路徑是由很多子路徑構(gòu)成,這些子路徑都是在一個(gè)列表中,所有的子路徑線弧形等等構(gòu)成圖形。 最終效果圖 showImg(https://segmentfault.com/img/bVbvvTW); 一、定義變量 定義半徑,定義圓環(huán)厚度,定義圓心位置、定義默認(rè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è)是最...
閱讀 2102·2023-05-11 16:55
閱讀 3504·2021-08-10 09:43
閱讀 2618·2019-08-30 15:44
閱讀 2440·2019-08-29 16:39
閱讀 583·2019-08-29 13:46
閱讀 2005·2019-08-29 13:29
閱讀 921·2019-08-29 13:05
閱讀 691·2019-08-26 13:51