成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

JeOam / 2629人閱讀

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

最終效果圖

一、定義變量

定義半徑,定義圓環(huá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";
二、畫第一個圓弧
ctx.beginPath();
ctx.arc(x, y, radius, Math.PI * 1.5, Math.PI)

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

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

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

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

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

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

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

六、填充
 ctx.fill();

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

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

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

八、繪制第二個進度條圓環(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();

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

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

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

完整代碼




    
    
    
    canvas
    



    
100 服務分

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/116114.html

相關文章

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

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

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

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

    Scliang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<