AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

如何僅使用CSS創(chuàng)建一個(gè)環(huán)形進(jìn)度條?

來(lái)源: 責(zé)編: 時(shí)間:2024-04-02 17:23:13 213觀看
導(dǎo)讀這一系列課程將包含各種 ES6 輔助函數(shù)。它包括處理原語(yǔ)、數(shù)組和對(duì)象的助手,以及算法、DOM 操作函數(shù)和 Node.js 實(shí)用程序等相關(guān)內(nèi)容。環(huán)形進(jìn)度條在現(xiàn)今的網(wǎng)站中是一個(gè)相當(dāng)常見(jiàn)的元素。然而,對(duì)很多開(kāi)發(fā)者來(lái)說(shuō),它們似乎是一

這一系列課程將包含各種 ES6 輔助函數(shù)。它包括處理原語(yǔ)、數(shù)組和對(duì)象的助手,以及算法、DOM 操作函數(shù)和 Node.js 實(shí)用程序等相關(guān)內(nèi)容。Rdh28資訊網(wǎng)——每日最新資訊28at.com

環(huán)形進(jìn)度條在現(xiàn)今的網(wǎng)站中是一個(gè)相當(dāng)常見(jiàn)的元素。然而,對(duì)很多開(kāi)發(fā)者來(lái)說(shuō),它們似乎是一個(gè)相當(dāng)大的挑戰(zhàn)。實(shí)際情況是,理解并掌握基礎(chǔ)并不困難。事實(shí)上,借助一些新的CSS特性,這比以往任何時(shí)候都更容易。Rdh28資訊網(wǎng)——每日最新資訊28at.com

Rdh28資訊網(wǎng)——每日最新資訊28at.com

環(huán)形進(jìn)度條的結(jié)構(gòu)

簡(jiǎn)單來(lái)說(shuō),一個(gè)環(huán)形進(jìn)度條就是兩個(gè)圓疊加在一起。下面的圓為背景,上面的圓為進(jìn)度指示器。關(guān)于我們?nèi)绾翁畛溥M(jìn)度指示器的部分我們稍后再講,但是基本的結(jié)構(gòu)可以通過(guò)使用一個(gè)<svg>元素和少量的CSS輕松構(gòu)建出來(lái)。Rdh28資訊網(wǎng)——每日最新資訊28at.com

<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;}

Rdh28資訊網(wǎng)——每日最新資訊28at.com

正如你所看到的,我們需要的唯一一部分CSS就是一個(gè)變換屬性。我們將前景圓旋轉(zhuǎn)90度,并將變換原點(diǎn)設(shè)置為圓的中心。這樣,圓就圍繞其中心旋轉(zhuǎn),進(jìn)度指示器從頂部開(kāi)始。Rdh28資訊網(wǎng)——每日最新資訊28at.com

數(shù)學(xué)計(jì)算

在我們開(kāi)始之前,不妨花一點(diǎn)時(shí)間理解代碼背后的數(shù)學(xué)原理。Rdh28資訊網(wǎng)——每日最新資訊28at.com

我們需要確定的兩個(gè)值是進(jìn)度條的大小和描邊的寬度。對(duì)于這個(gè)示例,我們確定了大小為250px,描邊寬度為20px。我們將使用這些值來(lái)計(jì)算我們需要的其它值。Rdh28資訊網(wǎng)——每日最新資訊28at.com

大小用來(lái)設(shè)置SVG元素的寬度和高度屬性,以及viewBox屬性。將其除以二,我們得到125px,對(duì)應(yīng)于圖片中心的坐標(biāo)。這個(gè)值用來(lái)設(shè)置圓的cx和cy屬性。Rdh28資訊網(wǎng)——每日最新資訊28at.com

考慮到描邊寬度,我們可以計(jì)算出圓的半徑。半徑是從圓心到邊緣的距離。在這種情況下,半徑是115px,即圖片的大小減去描邊寬度再除以二。Rdh28資訊網(wǎng)——每日最新資訊28at.com

最后,我們可以計(jì)算出圓的周長(zhǎng)。周長(zhǎng)是圓邊緣的長(zhǎng)度。在這種情況下,周長(zhǎng)是722.5px,即2 * π * 115px.。Rdh28資訊網(wǎng)——每日最新資訊28at.com

變量Rdh28資訊網(wǎng)——每日最新資訊28at.com

Rdh28資訊網(wǎng)——每日最新資訊28at.com

公式 Rdh28資訊網(wǎng)——每日最新資訊28at.com

sizeRdh28資訊網(wǎng)——每日最新資訊28at.com

250pxRdh28資訊網(wǎng)——每日最新資訊28at.com

N/A (user defined)Rdh28資訊網(wǎng)——每日最新資訊28at.com

strokeRdh28資訊網(wǎng)——每日最新資訊28at.com

20pxRdh28資訊網(wǎng)——每日最新資訊28at.com

N/A (user defined)Rdh28資訊網(wǎng)——每日最新資訊28at.com

centerRdh28資訊網(wǎng)——每日最新資訊28at.com

125pxRdh28資訊網(wǎng)——每日最新資訊28at.com

size / 2Rdh28資訊網(wǎng)——每日最新資訊28at.com

radiusRdh28資訊網(wǎng)——每日最新資訊28at.com

115pxRdh28資訊網(wǎng)——每日最新資訊28at.com

(size - stroke) / 2Rdh28資訊網(wǎng)——每日最新資訊28at.com

circumferenceRdh28資訊網(wǎng)——每日最新資訊28at.com

722.5pxRdh28資訊網(wǎng)——每日最新資訊28at.com

2 * π * radiusRdh28資訊網(wǎng)——每日最新資訊28at.com

接下來(lái),這些數(shù)字將開(kāi)始派上用場(chǎng),但我保證我們幾乎不需要做什么數(shù)學(xué)計(jì)算。Rdh28資訊網(wǎng)——每日最新資訊28at.com

填充進(jìn)度指示器

現(xiàn)在我們已經(jīng)有了基本的結(jié)構(gòu),現(xiàn)在需要來(lái)填充進(jìn)度指示器。為此,我們將使用 stroke-dasharray屬性,它需要傳入閃爍和長(zhǎng)度的交替值。Rdh28資訊網(wǎng)——每日最新資訊28at.com

要?jiǎng)?chuàng)建一個(gè)進(jìn)度條,我們希望傳入兩個(gè)值:填充部分的長(zhǎng)度和空白部分的長(zhǎng)度。獲取填充部分我們需要將進(jìn)度百分比乘以圓的周長(zhǎng)。獲取空白部分,我們會(huì)從周長(zhǎng)中減去填充部分。Rdh28資訊網(wǎng)——每日最新資訊28at.com

假設(shè)我們想要填充圓的50%,SVG代碼看起來(lái)將會(huì)是這樣:Rdh28資訊網(wǎng)——每日最新資訊28at.com

<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>

使進(jìn)度條動(dòng)態(tài)化

硬編碼stroke-dasharray值并不是很有用。我們希望能夠動(dòng)態(tài)地設(shè)置進(jìn)度百分比。這就是之前的CSS變量和數(shù)學(xué)在這里起作用的地方。Rdh28資訊網(wǎng)——每日最新資訊28at.com

給定一個(gè)--progress變量,我們可以相對(duì)容易地計(jì)算stroke-dasharray。知道我們將需要之前的大部分值,我們也可以將它們?cè)O(shè)置為CSS變量。更好的是,我們想要設(shè)置的大多數(shù)SVG屬性都可以用CSS操作。Rdh28資訊網(wǎng)——每日最新資訊28at.com

<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;}

這可能看起來(lái)很多,但其實(shí)主要就是設(shè)置CSS變量,然后使用它們來(lái)計(jì)算我們需要的值。我想指出一個(gè)很酷的事情,那就是pi常數(shù)是calc()函數(shù)的一部分!Rdh28資訊網(wǎng)——每日最新資訊28at.com

此時(shí),如果你使用一些JavaScript去操作--progress變量的值,你會(huì)看到進(jìn)度條填充起來(lái)。新增的transition屬性將使進(jìn)度條平滑地動(dòng)畫(huà)表現(xiàn)。Rdh28資訊網(wǎng)——每日最新資訊28at.com

定時(shí)進(jìn)度條

你是否曾在手機(jī)游戲里看過(guò)廣告?你知道的,那種如果你看完整個(gè)廣告就會(huì)給你獎(jiǎng)勵(lì)的那種。它們通常都有一個(gè)進(jìn)度條,隨著廣告的播放而填充。或者說(shuō),當(dāng)你觀看時(shí),它就像倒計(jì)時(shí)定時(shí)器一樣慢慢變空。無(wú)論你可能看到的是哪種類(lèi)型,它們都屬于同一概念的變體。Rdh28資訊網(wǎng)——每日最新資訊28at.com

我們?nèi)绾蝿?chuàng)建一個(gè)在預(yù)定時(shí)間內(nèi)填滿(mǎn)的進(jìn)度條呢?我們可以用JavaScript和Window.requestAnimationFrame()來(lái)實(shí)現(xiàn),但那樣就不太酷了。取而代之的是,我們可以使用animation屬性來(lái)讓--progress變量在設(shè)定的時(shí)間內(nèi)從0變?yōu)?00。Rdh28資訊網(wǎng)——每日最新資訊28at.com

下面是重構(gòu)后的代碼看起來(lái)是什么樣的:Rdh28資訊網(wǎng)——每日最新資訊28at.com

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

Rdh28資訊網(wǎng)——每日最新資訊28at.com

如果你嘗試將這個(gè)連接到我們的SVG,你會(huì)發(fā)現(xiàn)它并不像你想象的那樣運(yùn)作。這是因?yàn)闉g覽器并不知道如何處理--progress變量。它不知道它是一個(gè)數(shù)字,所以不知道如何對(duì)它進(jìn)行動(dòng)畫(huà)處理。Rdh28資訊網(wǎng)——每日最新資訊28at.com

幸運(yùn)的是,CSS為此提供了一個(gè)解決方案。@property規(guī)則允許我們定義自定義屬性,并告訴瀏覽器它們是什么類(lèi)型。在這種情況下,我們想告訴瀏覽器--progress是一個(gè)數(shù)字。Rdh28資訊網(wǎng)——每日最新資訊28at.com

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

Rdh28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在瀏覽器知道如何處理--progress變量,我們可以將它連接到動(dòng)畫(huà)。Rdh28資訊網(wǎng)——每日最新資訊28at.com

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

Rdh28資訊網(wǎng)——每日最新資訊28at.com

這將在5秒內(nèi)把--progress變量從0變到100。forwards關(guān)鍵字告訴瀏覽器保持動(dòng)畫(huà)的最后值。沒(méi)有它的話,動(dòng)畫(huà)完成后,進(jìn)度條會(huì)重置為0。你可以通過(guò)設(shè)置animation-direction屬性為reverse,并使用backwards而不是forwards來(lái)創(chuàng)建相反的效果。Rdh28資訊網(wǎng)——每日最新資訊28at.com

整合所有內(nèi)容

我們?cè)谶@篇文章中涵蓋了很多內(nèi)容。我們從一個(gè)簡(jiǎn)單的SVG元素,發(fā)展到一個(gè)功能完整的進(jìn)度條。我們使用了CSS變量、數(shù)學(xué)函數(shù),甚至一個(gè)新的CSS特性。讓我們來(lái)看看最終的代碼。Rdh28資訊網(wǎng)——每日最新資訊28at.com

<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;  }}

以下是一個(gè)展示代碼運(yùn)行效果Rdh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Rdh28資訊網(wǎng)——每日最新資訊28at.com

結(jié)論

使用現(xiàn)代HTML和CSS,我們創(chuàng)建了一個(gè)圓形進(jìn)度條。這個(gè)設(shè)置可以作為你實(shí)驗(yàn)的好起點(diǎn)。你可以參照使用,也可以擴(kuò)展它以適應(yīng)你的需要,如果需要的話,你可以加入一點(diǎn)JavaScript。你甚至可以將它轉(zhuǎn)換為Web組件或React組件用于你的項(xiàng)目。Rdh28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-80884-0.html如何僅使用CSS創(chuàng)建一個(gè)環(huán)形進(jìn)度條?

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 代碼是如何被被編譯的?

下一篇: 巧妙運(yùn)用Redisson打造自定義限流注解,讓接口防刷更高效

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • Find N3入網(wǎng):最高支持16+1TB

    OPPO將于近期登場(chǎng)的Find N3折疊屏目前已經(jīng)正式入網(wǎng),型號(hào)為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號(hào)的橫向折疊屏,而是跟別的廠商一樣采用了較為常見(jiàn)的
  • 得物效率前端微應(yīng)用推進(jìn)過(guò)程與思考

    一、背景效率工程隨著業(yè)務(wù)的發(fā)展,組織規(guī)模的擴(kuò)大,越來(lái)越多的企業(yè)開(kāi)始意識(shí)到協(xié)作效率對(duì)于企業(yè)團(tuán)隊(duì)的重要性,甚至是決定其在某個(gè)行業(yè)競(jìng)爭(zhēng)中突圍的關(guān)鍵,是企業(yè)長(zhǎng)久生存的根本。得物
  • 虛擬鍵盤(pán) API 的妙用

    你是否在遇到過(guò)這樣的問(wèn)題:移動(dòng)設(shè)備上有一個(gè)固定元素,當(dāng)激活虛擬鍵盤(pán)時(shí),該元素被隱藏在了鍵盤(pán)下方?多年來(lái),這一直是 Web 上的默認(rèn)行為,在本文中,我們將探討這個(gè)問(wèn)題、為什么會(huì)發(fā)生
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時(shí)候了!學(xué)弟,最近學(xué)習(xí)的怎么樣啊 了不起學(xué)弟:最近學(xué)習(xí)的還不錯(cuò),每天都在學(xué)習(xí),每天都在進(jìn)步! 了不起:那你最近學(xué)習(xí)的什么呢? 了不起學(xué)弟:最近在學(xué)習(xí)C
  • 猿輔導(dǎo)與新東方的兩種“歸途”

    作者|卓心月 出品|零態(tài)LT(ID:LingTai_LT)如何成為一家偉大企業(yè)?答案一定是對(duì)&ldquo;勢(shì)&rdquo;的把握,這其中最關(guān)鍵的當(dāng)屬對(duì)企業(yè)戰(zhàn)略的制定,且能夠站在未來(lái)看現(xiàn)在,即使這其中的
  • 東方甄選單飛:有些鳥(niǎo)注定是關(guān)不住的

    文/彭寬鴻編輯/羅卿東方甄選創(chuàng)始人俞敏洪帶隊(duì)的&ldquo;7天甘肅行&rdquo;直播活動(dòng)已在近日順利收官。成立后一年多時(shí)間里,東方甄選要脫離抖音自立門(mén)戶(hù)的傳聞不絕于耳,&ldquo;7
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創(chuàng) 作者|程心 羅輯2023年之前,對(duì)于自己的&ldquo;今天&rdquo;,百度也很迷茫。&ldquo;新業(yè)務(wù)到 2022 年底還是 0,希望 2023 年出來(lái)一個(gè) 1。&rdquo;這是2022年底,李彥宏
  • 華為Mate 60系列用上可變靈動(dòng)島:正式版體驗(yàn)將會(huì)更出色

    這段時(shí)間以來(lái),關(guān)于華為新旗艦的爆料日漸密集。據(jù)此前多方爆料,今年華為將開(kāi)始恢復(fù)一年雙旗艦戰(zhàn)略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • 英特爾Xe HPG游戲顯卡:擁有512EU,單風(fēng)扇版本

    據(jù)10 月 30 日外媒 TheVerge 消息報(bào)道,英特爾 Xe HPG Arc Alchemist 的正面實(shí)被曝光,不僅擁有 512 EU 版顯卡,還擁有 128EU 的單風(fēng)扇版本。另外,這款顯卡 PCB
Top