精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何僅使用CSS創建一個環形進度條?

開發 前端
使用現代HTML和CSS,我們創建了一個圓形進度條。這個設置可以作為你實驗的好起點。你可以參照使用,也可以擴展它以適應你的需要,如果需要的話,你可以加入一點JavaScript。

這一系列課程將包含各種 ES6 輔助函數。它包括處理原語、數組和對象的助手,以及算法、DOM 操作函數和 Node.js 實用程序等相關內容。

環形進度條在現今的網站中是一個相當常見的元素。然而,對很多開發者來說,它們似乎是一個相當大的挑戰。實際情況是,理解并掌握基礎并不困難。事實上,借助一些新的CSS特性,這比以往任何時候都更容易。

環形進度條的結構

簡單來說,一個環形進度條就是兩個圓疊加在一起。下面的圓為背景,上面的圓為進度指示器。關于我們如何填充進度指示器的部分我們稍后再講,但是基本的結構可以通過使用一個<svg>元素和少量的CSS輕松構建出來。

<svg width="250" height="250" viewBox="0 0 250 250">
  <circle class="bg"
    cx="125" cy="125" r="115" fill="none" stroke="#ddd" stroke-width="20"
  ></circle>
  <circle class="fg"
    cx="125" cy="125" r="115" fill="none" stroke="#5394fd" stroke-width="20"
  ></circle>
</svg>
circle.fg {
  transform: rotate(-90deg);
  transform-origin: 125px 125px;
}

正如你所看到的,我們需要的唯一一部分CSS就是一個變換屬性。我們將前景圓旋轉90度,并將變換原點設置為圓的中心。這樣,圓就圍繞其中心旋轉,進度指示器從頂部開始。

數學計算

在我們開始之前,不妨花一點時間理解代碼背后的數學原理。

我們需要確定的兩個值是進度條的大小和描邊的寬度。對于這個示例,我們確定了大小為250px,描邊寬度為20px。我們將使用這些值來計算我們需要的其它值。

大小用來設置SVG元素的寬度和高度屬性,以及viewBox屬性。將其除以二,我們得到125px,對應于圖片中心的坐標。這個值用來設置圓的cx和cy屬性。

考慮到描邊寬度,我們可以計算出圓的半徑。半徑是從圓心到邊緣的距離。在這種情況下,半徑是115px,即圖片的大小減去描邊寬度再除以二。

最后,我們可以計算出圓的周長。周長是圓邊緣的長度。在這種情況下,周長是722.5px,即2 * π * 115px.。

變量

公式 

size

250px

N/A (user defined)

stroke

20px

N/A (user defined)

center

125px

size / 2

radius

115px

(size - stroke) / 2

circumference

722.5px

2 * π * radius

接下來,這些數字將開始派上用場,但我保證我們幾乎不需要做什么數學計算。

填充進度指示器

現在我們已經有了基本的結構,現在需要來填充進度指示器。為此,我們將使用 stroke-dasharray屬性,它需要傳入閃爍和長度的交替值。

要創建一個進度條,我們希望傳入兩個值:填充部分的長度和空白部分的長度。獲取填充部分我們需要將進度百分比乘以圓的周長。獲取空白部分,我們會從周長中減去填充部分。

假設我們想要填充圓的50%,SVG代碼看起來將會是這樣:

<svg width="250" height="250" viewBox="0 0 250 250">
  <circle class="bg"
    cx="125" cy="125" r="115" fill="none" stroke="#ddd" stroke-width="20"
  ></circle>
  <circle class="fg"
    cx="125" cy="125" r="115" fill="none" stroke="#5394fd" stroke-width="20"
    stroke-dasharray="361.25 361.25"
  ></circle>

使進度條動態化

硬編碼stroke-dasharray值并不是很有用。我們希望能夠動態地設置進度百分比。這就是之前的CSS變量和數學在這里起作用的地方。

給定一個--progress變量,我們可以相對容易地計算stroke-dasharray。知道我們將需要之前的大部分值,我們也可以將它們設置為CSS變量。更好的是,我們想要設置的大多數SVG屬性都可以用CSS操作。

<svg
  width="250" height="250" viewBox="0 0 250 250"
  class="circular-progress" style="--progress: 50"
>
  <circle class="bg"></circle>
  <circle class="fg"></circle>
</svg>
.circular-progress {
  --size: 250px;
  --half-size: calc(var(--size) / 2);
  --stroke-width: 20px;
  --radius: calc((var(--size) - var(--stroke-width)) / 2);
  --circumference: calc(var(--radius) * pi * 2);
  --dash: calc((var(--progress) * var(--circumference)) / 100);
}


.circular-progress circle {
  cx: var(--half-size);
  cy: var(--half-size);
  r: var(--radius);
  stroke-width: var(--stroke-width);
  fill: none;
  stroke-linecap: round;
}


.circular-progress circle.bg {
  stroke: #ddd;
}


.circular-progress circle.fg {
  transform: rotate(-90deg);
  transform-origin: var(--half-size) var(--half-size);
  stroke-dasharray: var(--dash) calc(var(--circumference) - var(--dash));
  transition: stroke-dasharray 0.3s linear 0s;
  stroke: #5394fd;
}

這可能看起來很多,但其實主要就是設置CSS變量,然后使用它們來計算我們需要的值。我想指出一個很酷的事情,那就是pi常數是calc()函數的一部分!

此時,如果你使用一些JavaScript去操作--progress變量的值,你會看到進度條填充起來。新增的transition屬性將使進度條平滑地動畫表現。

定時進度條

你是否曾在手機游戲里看過廣告?你知道的,那種如果你看完整個廣告就會給你獎勵的那種。它們通常都有一個進度條,隨著廣告的播放而填充。或者說,當你觀看時,它就像倒計時定時器一樣慢慢變空。無論你可能看到的是哪種類型,它們都屬于同一概念的變體。

我們如何創建一個在預定時間內填滿的進度條呢?我們可以用JavaScript和Window.requestAnimationFrame()來實現,但那樣就不太酷了。取而代之的是,我們可以使用animation屬性來讓--progress變量在設定的時間內從0變為100。

下面是重構后的代碼看起來是什么樣的:

@keyframes progress-animation {
  from {
    --progress: 0;
  }
  to {
    --progress: 100;
  }
}

如果你嘗試將這個連接到我們的SVG,你會發現它并不像你想象的那樣運作。這是因為瀏覽器并不知道如何處理--progress變量。它不知道它是一個數字,所以不知道如何對它進行動畫處理。

幸運的是,CSS為此提供了一個解決方案。@property規則允許我們定義自定義屬性,并告訴瀏覽器它們是什么類型。在這種情況下,我們想告訴瀏覽器--progress是一個數字。

@property --progress {
  syntax: "<number>";
  inherits: false;
  initial-value: 0;
}

現在瀏覽器知道如何處理--progress變量,我們可以將它連接到動畫。

.circular-progress {
  animation: progress-animation 5s linear 0s 1 forwards;
}

這將在5秒內把--progress變量從0變到100。forwards關鍵字告訴瀏覽器保持動畫的最后值。沒有它的話,動畫完成后,進度條會重置為0。你可以通過設置animation-direction屬性為reverse,并使用backwards而不是forwards來創建相反的效果。

整合所有內容

我們在這篇文章中涵蓋了很多內容。我們從一個簡單的SVG元素,發展到一個功能完整的進度條。我們使用了CSS變量、數學函數,甚至一個新的CSS特性。讓我們來看看最終的代碼。

<svg width="250" height="250" viewBox="0 0 250 250" class="circular-progress">
  <circle class="bg"></circle>
  <circle class="fg"></circle>
</svg>
.circular-progress {
  --size: 250px;
  --half-size: calc(var(--size) / 2);
  --stroke-width: 20px;
  --radius: calc((var(--size) - var(--stroke-width)) / 2);
  --circumference: calc(var(--radius) * pi * 2);
  --dash: calc((var(--progress) * var(--circumference)) / 100);
  animation: progress-animation 5s linear 0s 1 forwards;
}


.circular-progress circle {
  cx: var(--half-size);
  cy: var(--half-size);
  r: var(--radius);
  stroke-width: var(--stroke-width);
  fill: none;
  stroke-linecap: round;
}


.circular-progress circle.bg {
  stroke: #ddd;
}


.circular-progress circle.fg {
  transform: rotate(-90deg);
  transform-origin: var(--half-size) var(--half-size);
  stroke-dasharray: var(--dash) calc(var(--circumference) - var(--dash));
  transition: stroke-dasharray 0.3s linear 0s;
  stroke: #5394fd;
}


@property --progress {
  syntax: "<number>";
  inherits: false;
  initial-value: 0;
}


@keyframes progress-animation {
  from {
    --progress: 0;
  }
  to {
    --progress: 100;
  }
}

以下是一個展示代碼運行效果

圖片圖片

結論

使用現代HTML和CSS,我們創建了一個圓形進度條。這個設置可以作為你實驗的好起點。你可以參照使用,也可以擴展它以適應你的需要,如果需要的話,你可以加入一點JavaScript。你甚至可以將它轉換為Web組件或React組件用于你的項目。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2023-07-18 15:49:22

HTMLCSS

2024-12-02 09:37:51

2022-04-24 14:56:53

容器組件StackTS

2013-03-12 10:35:06

CSS 3

2020-10-26 10:33:06

Vue進度條前端

2015-07-31 11:19:43

數字進度條源碼

2023-11-30 11:38:29

CSS網頁進度條

2021-04-28 10:01:00

JSCSS進度條

2021-11-02 15:35:01

JavaScriptCSS開發

2023-12-11 17:15:05

應用開發波紋進度條ArkUI

2021-11-02 07:44:36

CSS 技巧進度條

2009-12-25 17:58:12

WPF進度條

2023-03-15 09:00:43

SwiftUISlider

2009-07-21 14:49:55

XmlHttpRequ文件上傳進度條

2021-09-27 10:43:18

鴻蒙HarmonyOS應用

2011-07-05 15:16:00

QT 進度條

2024-08-06 14:29:37

2022-07-20 09:10:47

Linux

2015-05-27 07:44:34

日歷控件 jQueryCSS3

2009-08-17 13:56:29

C#進度條的使用
點贊
收藏

51CTO技術棧公眾號

日韩美女视频一区| 欧美激情精品久久久六区热门| 亚洲www啪成人一区二区麻豆| 91在线网站视频| 玖玖爱这里只有精品| 国产成人午夜性a一级毛片| 国产精品久久久久9999吃药| 国产在线视频91| 日韩欧美国产成人精品免费| 麻豆国产一区| 亚洲va国产天堂va久久en| 国产精品二区二区三区| www日韩精品| 国产欧美高清视频在线| 制服视频三区第一页精品| 精品一区二区视频| 国产三级理论片| 亚洲人体av| 精品国产成人在线影院| 日本少妇高潮喷水视频| 91porn在线观看| 国产真实精品久久二三区| 欧美高清视频在线播放| 18禁裸乳无遮挡啪啪无码免费| jizz欧美| 亚洲一区二区三区四区的| 免费一区二区三区在在线视频| 中文字幕人妻一区二区在线视频| 婷婷亚洲最大| 日韩国产高清视频在线| 思思久久精品视频| 麻豆免费在线| 国产精品另类一区| 国产在线欧美日韩| 亚洲视频在线观看免费视频| 亚洲激情五月| 国产亚洲精品成人av久久ww| 亚洲妇女无套内射精| 欧美成人a交片免费看| 亚洲免费观看高清在线观看| 蜜桃av噜噜一区二区三区| 国产欧美久久久精品免费| 亚洲女人av| 欧美丰满片xxx777| 欧美另类69xxxx| 欧美三级电影在线| 欧美一级一区二区| 国产aaaaa毛片| 国产精品蜜臀| 亚洲人成伊人成综合网小说| 午夜视频久久久| 天堂av在线资源| 高潮精品一区videoshd| 国产一区玩具在线观看| 欧美精品韩国精品| 国产一区观看| 久久精品国产精品| 欧美xxxx精品| 少妇高潮一区二区三区| 欧美成人猛片aaaaaaa| 亚洲黄色av片| 996久久国产精品线观看| 日本乱码高清不卡字幕| 欧美国产亚洲一区| freexxx性亚洲精品| 亚洲欧洲性图库| 亚洲美女搞黄| 国产日本在线观看| 国产日韩欧美a| 欧美日韩在线一区二区三区| 色吊丝在线永久观看最新版本| 秋霞成人午夜伦在线观看| 国产91精品久久久久久久| 久久亚洲精品大全| 欧美区一区二| 欧美成人激情在线| 黄视频网站免费看| 日韩欧美午夜| 色狠狠av一区二区三区香蕉蜜桃| 日本少妇xxxxx| 成人国产精品一级毛片视频| 国产小视频国产精品| 91激情视频在线观看| 欧美手机视频| 亚洲乱码一区av黑人高潮| 美女100%无挡| 加勒比久久综合| 一本色道久久综合狠狠躁篇怎么玩 | 模特精品在线| 热99在线视频| 波多野结衣av无码| 另类欧美日韩国产在线| 国产精品视频专区| 夜夜狠狠擅视频| 国产一区二区精品久久99| 99免费在线观看视频| 日批视频免费播放| 久久精品日产第一区二区三区高清版| 日韩电影天堂视频一区二区| 亚洲麻豆精品| 一区二区三区在线免费视频| 欧美 日韩 亚洲 一区| 手机看片久久| 91久久精品午夜一区二区| 亚洲免费一级视频| 亚洲视频国产| 日韩成人黄色av| 亚洲一级片在线播放| 国产一区不卡| 欧美精品在线免费| 久久久久久久极品| 久久99久久精品| 精品国产一区二区三区四区精华| 蜜桃视频在线入口www| 欧美激情自拍偷拍| 一级性生活视频| 性欧美freesex顶级少妇| 欧美日韩不卡在线| 99精品一区二区三区无码吞精 | 国内一区在线| 波多野结衣在线网站| 亚洲视频精选在线| 97国产精东麻豆人妻电影| 日韩在线激情| 亚洲精品久久久久中文字幕欢迎你| 国产真实乱人偷精品人妻| 最新国产精品| 国产精品第七影院| 亚洲乱色熟女一区二区三区| 成人免费视频视频| 在线不卡视频一区二区| 日韩脚交footjobhdboots| 精品视频在线免费观看| 亚洲精品在线视频免费观看| 97精品视频在线看| 日本午夜在线亚洲.国产| 超碰在线观看99| 欧美激情一区在线观看| 欧美色图另类小说| 亚洲精品大全| 国产一区二区三区久久精品 | 欧美日韩另类视频| 超碰中文字幕在线观看| 日韩精品欧美| 91地址最新发布| 亚洲av无码一区二区乱子伦| 国产精品视频看| 国产精品69页| 欧美偷窥清纯综合图区| 欧美日韩国产成人| 一级黄色片在线播放| 久久欧美中文字幕| 久久成人免费观看| 自拍偷拍亚洲图片| 中文字幕综合一区| 黄色网址中文字幕| 26uuu精品一区二区在线观看| av动漫在线播放| 国产精品视频一区二区三区综合| 在线看欧美日韩| 日韩 国产 欧美| 久久蜜桃一区二区| 鲁一鲁一鲁一鲁一澡| 久9re热视频这里只有精品| 久久国产精品久久久| 91九色蝌蚪91por成人| 国产精品久线观看视频| 五月天婷婷激情视频| 欧美视频免费| 国产精品视频xxxx| 成年女人的天堂在线| 欧美日韩在线综合| 亚洲欧美日韩第一页| 麻豆精品一区二区综合av| 亚洲二区自拍| 香蕉久久一区| 久热国产精品视频| www日本视频| 亚洲综合色视频| 大尺度在线观看| 在线播放精品| 欧美xxxx黑人又粗又长精品| 全亚洲第一av番号网站| 中文字幕久久亚洲| 91国内精品久久久| 亚洲精品ww久久久久久p站| 日本女人性视频| 欧美日韩专区| 久久99影院| 99久久婷婷国产综合精品首页| 色噜噜国产精品视频一区二区 | 亚洲精品一区国产| 欧美极品xxxx| 狠狠v欧美ⅴ日韩v亚洲v大胸| 五月综合激情网| 日韩精品无码一区二区三区久久久| 七七婷婷婷婷精品国产| 天堂av一区二区| 精品中文字幕一区二区三区四区| 欧美激情视频一区| 久久电影视频| 欧美午夜精品一区| 污污的视频在线免费观看| 国产.欧美.日韩| 日韩av在线第一页| 日韩国产一区二区| 国产日韩一区欧美| 91精品xxx在线观看| 麻豆乱码国产一区二区三区| 日本黄色一区二区三区| 欧美综合一区二区| 久久久久无码国产精品| 久久综合精品国产一区二区三区| 日本www在线播放| 欧美r级电影| 国产精品xxxx| 国产精品伦一区二区| 欧美国产日韩一区二区三区| 久久久久久女乱国产| 欧美视频精品在线观看| 久久久国产精华液| 国产日韩欧美麻豆| 极品人妻一区二区| 青青草91视频| 国产精品12345| 97欧美在线视频| 久久婷婷国产综合尤物精品| 亚洲一区av| 日本成人在线视频网址| 在线黄色网页| 一区二区福利视频| 天天干免费视频| 91精品国产麻豆| 日批视频免费观看| 亚洲制服欧美中文字幕中文字幕| 日韩免费成人av| 91免费视频网| 男女性杂交内射妇女bbwxz| 久久国产生活片100| 国产福利视频在线播放| 精品1区2区3区4区| 亚洲精品中文字幕在线| 欧美男同视频网| 国产专区一区二区| 伊人亚洲精品| 国产精品夜间视频香蕉| 都市激情亚洲一区| 欧美一区二三区| 四虎久久免费| 国产一区二区激情| 蜜桃视频在线观看网站| 精品久久久久久久久久久久包黑料| 中文天堂在线视频| 色综合久久六月婷婷中文字幕| 国产主播在线播放| 亚洲精品久久久蜜桃| 亚洲二区在线播放| 成人免费一区二区三区视频 | 久久精品国产在热久久| www黄色在线| 日韩在线卡一卡二| 欧美 日韩精品| 亚洲欧美日韩精品一区二区| 国产原创中文在线观看| 亚洲免费高清| 精品视频免费在线播放| 日韩视频久久| 欧美一区二区三区精美影视| 亚洲精品456| 手机成人在线| 午夜久久美女| 日本网站免费在线观看| 天堂久久久久va久久久久| 黄色手机在线视频| 国产成人免费视频精品含羞草妖精 | 三级黄色在线观看| 亚洲男人天堂一区| 中国一级特黄毛片| 欧美吞精做爰啪啪高潮| 99久久精品日本一区二区免费| 精品三级在线看| 久久久久久久影视| 久久国产色av| 色在线免费观看| 成人a免费视频| 国产suv精品一区| 日产精品一线二线三线芒果| 久久久久亚洲| 妺妺窝人体色www在线小说| 免费不卡在线观看| 永久免费未满蜜桃| 国产欧美日本一区视频| 玖玖爱免费视频| 在线亚洲一区二区| 亚洲黄色在线观看视频| 在线观看国产精品91| 激情网站在线| 国产精品亚洲综合天堂夜夜| 九九热播视频在线精品6| 亚洲一卡二卡三卡四卡无卡网站在线看| 欧美日韩国产综合网| 午夜在线观看av| www.日本不卡| 裸体武打性艳史| 在线国产电影不卡| 乱色精品无码一区二区国产盗| 国产婷婷97碰碰久久人人蜜臀| а天堂中文在线官网| 国产成人在线播放| 国产精品毛片久久久| 7777在线视频| 日韩国产精品91| 亚洲精品在线视频免费观看| 伊人婷婷欧美激情| 在线观看中文字幕av| 亚洲免费中文字幕| 18video性欧美19sex高清| 成人黄色av网站| av在线不卡顿| 91精品91久久久中77777老牛| 国产成人三级在线观看| 女人18毛片毛片毛片毛片区二| 色又黄又爽网站www久久| 欧洲av在线播放| 欧美另类暴力丝袜| 99久久这里有精品| 相泽南亚洲一区二区在线播放| 99伊人成综合| 亚洲一级Av无码毛片久久精品| 亚洲欧洲国产日本综合| 在线观看毛片网站| 亚洲最新av在线| 黑人巨大精品| 精品午夜一区二区| 亚洲激情自拍| 稀缺呦国内精品呦| 一区二区三区不卡在线观看| 国产免费久久久| 久久夜色精品国产亚洲aⅴ| 欧美黄页在线免费观看| 亚洲国产精品日韩| 蜜桃传媒麻豆第一区在线观看| 国产中年熟女高潮大集合| 欧美视频在线观看免费网址| 色就是色亚洲色图| 欧美与黑人午夜性猛交久久久| 日本午夜精品久久久| 久久免费视频3| 91论坛在线播放| 久久久久久在线观看| 亚洲精品自产拍| 黑人精品一区| 亚洲春色在线视频| 蜜桃精品视频在线| 手机在线中文字幕| 91精品国产综合久久精品app| 四虎影视成人| 国产日韩精品久久| 午夜在线视频一区二区区别| 99久久人妻无码精品系列| 在线影视一区二区三区| 中文字幕在线观看日本| 亚洲一区二区在线| 欧美日韩一区二区国产| 国产精品无码一区二区三| 欧美性猛交xxxxx免费看| 北岛玲日韩精品一区二区三区| 国产色综合天天综合网| 一区二区三区四区电影| 男女性杂交内射妇女bbwxz| 精品久久久久久久大神国产| 欧洲免费在线视频| 国产在线精品播放| 国语自产精品视频在线看8查询8| 黄色污在线观看| 在线观看亚洲一区| 亚洲制服国产| 国产一区二区三区无遮挡| 日本午夜精品视频在线观看| 三级全黄做爰视频| 日韩成人在线免费观看| jvid一区二区三区| 久久综合亚洲精品| 国产午夜精品一区二区三区四区| 国产精品区在线观看| 久久久在线免费观看| 精品国产一区探花在线观看 | 亚洲欧美中文日韩在线| 久久电影天堂| 久久久性生活视频| 中文字幕巨乱亚洲| www.亚洲天堂.com| 国产精品高精视频免费| 一区二区三区毛片免费| 国产精品815.cc红桃| 欧美一级二级三级乱码| 性欧美1819sex性高清| 91看片淫黄大片91| 国产欧美在线观看一区| 狠狠综合久久av一区二区|