搜尋
首頁web前端html教學详解用CSS3制作圆形滚动进度条动画效果_html/css_WEB-ITnose

原文来自:http://www.cnblogs.com/jr1993/p/4677921.html

主 题

今天手把手教大家用 CSS 3制作圆形滚动 进度条 动画 ,想不会都难!那么,到底是什么东东呢?先不急,之前我分享了一个css实现 进度条 效果的博客 CSS 实现 进度条 和订单进度条 》, 但是呢,那篇博客只是制作出来效果而已,并没有 动画 效果,因为当时正期末复习期间,所以就省了制作 动画 的时间成本。所以,今天就一起把各种效果都实现吧!

内 容

先看一下效果图,会提升我们的学习兴趣哟:

好的,我将按照此图从上到下的顺序讲解,由于第一和第二种效果之气那篇博客《 CSS实现进度条和订单进度条 》已经介绍过怎么做的了,这里就把重心放在动画上面, 对于圆形效果是重点,我将详细讲解。

第一种效果:

html结构:

<div id="progress">      <span></span></div>

css样式:

        #progress{            width: 50%;            height: 30px;            border:1px solid #ccc;            border-radius: 15px;            margin: 50px 0 0 100px;            overflow: hidden;            box-shadow: 0 0 5px 0px #ddd inset;        }        #progress span {            display: inline-block;            width: 100%;            height: 100%;            background: #2989d8; /* Old browsers */            background: -moz-linear-gradient(45deg, #2989d8 33%, #7db9e8 34%, #7db9e8 59%, #2989d8 60%); /* FF3.6+ */            background: -webkit-gradient(linear, left bottom, right top, color-stop(33%,#2989d8), color-stop(34%,#7db9e8), color-stop(59%,#7db9e8), color-stop(60%,#2989d8)); /* Chrome,Safari4+ */            background: -webkit-linear-gradient(45deg, #2989d8 33%,#7db9e8 34%,#7db9e8 59%,#2989d8 60%); /* Chrome10+,Safari5.1+ */            background: -o-linear-gradient(45deg, #2989d8 33%,#7db9e8 34%,#7db9e8 59%,#2989d8 60%); /* Opera 11.10+ */            background: -ms-linear-gradient(45deg, #2989d8 33%,#7db9e8 34%,#7db9e8 59%,#2989d8 60%); /* IE10+ */            background: linear-gradient(45deg, #2989d8 33%,#7db9e8 34%,#7db9e8 59%,#2989d8 60%); /* W3C */            filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2989d8', endColorstr='#2989d8',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */            background-size: 60px 30px;            text-align: center;            color:#fff;            -webkit-animation:load 3s ease-in;        }        @-webkit-keyframes load{            0%{                width: 0%;            }            100%{                width:100%;            }        }				

可以看到其实这种进度条的动画是最容易实现的,根据具体进度百分比设置默认的width百分比和动画里100%处的width百分比就行了,比如说,我想实现70%的进度条动画效果,那么我只需要修改一下两处地方:

#progress span{    width: 70%;}@-webkit-keyframes load{      0%{        width: 0%;      }    100%{        width:70%;      }}

第二种效果:

html结构:

<div id="progressBar">      <!-- 进度条 -->      <div>        <span></span>      </div>      <!-- 五个圆 -->      <span></span>      <span></span>      <span></span>      <span></span>      <span></span> </div>

css样式:

       #progressBar{            width: 80%;            height: 50px;            position: relative;            margin: 50px 0 0 100px;        }        #progressBar div{            width: 100%;            height: 10px;            position: absolute;            top:50%;            left: 0;            margin-top:-20px;            background: #ccc;        }        #progressBar div span{            position: absolute;            display: inline-block;            background: green;            height: 10px;            width: 100%;            -webkit-animation:bgLoad 5.5s linear;        }        @-webkit-keyframes bgLoad{            0%{                width: 0%;            }            18.18%,27.27%{                width:25%;            }            45.45%,54.54%{                width: 50%;            }            72.72%,81.81%{                width: 75%;            }            100%{                width:100%;            }        }        #progressBar>span{            position: absolute;            top:0;            margin-top: -10px;            width: 40px;            height: 40px;            border-radius: 50%;            background: #ccc;            margin-left: -20px;            color:#fff;        }        @-webkit-keyframes circleLoad_1{            0%,66.66%{                background: #ccc;            }            100%{                background:green;            }        }        @-webkit-keyframes circleLoad_2{            0%,83.34%{                background: #ccc;            }            100%{                background:green;            }        }        @-webkit-keyframes circleLoad_3{            0%,88.88%{                background: #ccc;            }            100%{                background:green;            }        }        @-webkit-keyframes circleLoad_4{            0%,91.67%{                background: #ccc;            }            100%{                background:green;            }        }        #progressBar span:nth-child(2){            left: 0%;background:green;        }        #progressBar span:nth-child(3){            left: 25%;background:green;            -webkit-animation:circleLoad_1 1.5s ease-in;        }        #progressBar span:nth-child(4){            left: 50%;background:green;            -webkit-animation:circleLoad_2 3s ease-in;        }        #progressBar span:nth-child(5){            left: 75%;background:green;            -webkit-animation:circleLoad_3 4.5s ease-in;        }        #progressBar span:nth-child(6){            left: 100%;background:green;            -webkit-animation:circleLoad_4 6s ease-in;        }						

可以看到,其实对于动画本身是很简单的,一看就明白了, 主要就是动画持续时间的计算 ,由于这个动画效果只执行一次,所以其实也可以用动画延迟时间来保证各个动画在指定的时间点开始执行,但是对于循环或者多次动画效果,延迟很不灵活,所以这里还是用持续时间的长短来控制动画的执行时间。

这个订单进度条,我是设置了走一段用时1秒,然后每到一个圆点就停顿0.5秒,而这0.5秒就是相对应的圆点的动画持续执行时间。但是 再次强调这个是单次动画 ,如果想实现循环动画,还是得做调整的,必须让所有动画的持续执行时间是一样的,不然循环起来就错乱的。而时间的改动也会影响动画关键帧的改动, 下面对第一小段和第二个圆的动画时间讲解一下

首先,细长条的动画持续时间通过计算:

4小段x1秒 + 中间3个圆点 x 0.5秒 = 5.5秒

接下来就是计算细长条动画关键帧的时间分配,设每一份0.5秒,那么共总就是11份,每小段得2份,每个圆点得1份,用100%除以11,可得每份大约是9.09%,接下来就是分配时间了,这个就简单了,不多说。

接着,当细长条完成第一小段的动画效果到达第二个圆点时,会停顿0.5秒,而这0.5秒就是第二个圆点的动画时间,所以第二个圆点的动画持续时间就是:

等待细长条执行完1小段 x1秒+自身的动画完成时间x0.5秒=1.5秒

同样的方法计算每一份的时间然后进行分配。 同理,其他动画效果相似,就不再赘述了。

第三种效果:

今天就重点讲解这个效果,首先,当有人说你能不能做一个圆形进度条效果出来时,如果是静态完整圆形进度条,那么就很简单了:

.circleprogress{    width: 160px;    height: 160px;    border:20px solid red;    border-radius: 50%;}

然后就会说,这很简单嘛。但是如果不是完整圆形的呢?想了想:

.circleprogress{    width: 160px;    height: 160px;    border:20px solid red;    border-left:20px solid transparent;    border-bottom:20px solid transparent;    border-radius: 50%;}

然后还是会说,这个也不难啦。可是,如果不是刚好都是45度的倍数呢?

OK,我们先设置一个200×200的方块,然后我们在这里面完成我们的效果:

.circleProgress_wrapper{    width: 200px;    height: 200px;    margin: 50px auto;    position: relative;    border:1px solid #ddd;}

接下来我将在这个容器里再放两个矩形,每个矩形都占一半:

<div class="circleProgress_wrapper">        <div class="wrapper right">            <div class="circleProgress rightcircle"></div>        </div>        <div class="wrapper left">            <div class="circleProgress leftcircle"></div>        </div> </div>
.wrapper{    width: 100px;    height: 200px;    position: absolute;    top:0;    overflow: hidden;}.right{    right:0;}.left{    left:0;}

这里重点说一下.wrapper 的overflow:hidden; 起着关键性作用。这两个矩形都设置了溢出隐藏,那么当我们去旋转矩形里面的圆形的时候,溢出部分就被隐藏掉了,这样我们就可以达到我们想要的效果。

从html结构也已看到,在左右矩形里面还会各自有一个圆形,先讲一下右半圆:

.circleProgress{    width: 160px;    height: 160px;    border:20px solid transparent;    border-radius: 50%;    position: absolute;    top:0;}.rightcircle{    border-top:20px solid green;    border-right:20px solid green;    right:0;}

可以看到,效果已经出来了,其实本来是一个半圆弧,但由于我们设置了上边框和右边框,所以上边框有一半溢出而被隐藏了,所以我们可以通过旋转得以还原:

.circleProgress{    width: 160px;    height: 160px;    border:20px solid transparent;    border-radius: 50%;    position: absolute;    top:0;    -webkit-transform: rotate(45deg);}

所以只要旋转自己想要的角度就可以实现任意比例的进度条。接下来把左半圆弧也实现,变成一个全圆:

.leftcircle{    border-bottom:20px solid green;    border-left:20px solid green;    left:0;}

紧接着,就是让它动起来,原理是这样的, 先让右半圆弧旋转180度,再让左半圆弧旋转180度 ,这样,两个半圆弧由于先后都全部溢出而消失了,所以看起来就是进度条再滚动的效果:

        .rightcircle{            border-top:20px solid green;            border-right:20px solid green;            right:0;            -webkit-animation: circleProgressLoad_right 5s linear infinite;        }        .leftcircle{            border-bottom:20px solid green;            border-left:20px solid green;            left:0;            -webkit-animation: circleProgressLoad_left 5s linear infinite;        }        @-webkit-keyframes circleProgressLoad_right{            0%{                -webkit-transform: rotate(45deg);            }            50%,100%{                -webkit-transform: rotate(225deg);            }        }        @-webkit-keyframes circleProgressLoad_left{            0%,50%{                -webkit-transform: rotate(45deg);            }            100%{                -webkit-transform: rotate(225deg);            }        }				

当然,我们只需要调整一下角度就可以实现反向的效果:

        .circleProgress{            width: 160px;            height: 160px;            border:20px solid transparent;            border-radius: 50%;            position: absolute;            top:0;            -webkit-transform: rotate(-135deg);        }        @-webkit-keyframes circleProgressLoad_right{            0%{                -webkit-transform: rotate(-135deg);            }            50%,100%{                -webkit-transform: rotate(45deg);            }        }        @-webkit-keyframes circleProgressLoad_left{            0%,50%{                -webkit-transform: rotate(-135deg);            }            100%{                -webkit-transform: rotate(45deg);            }        }				

好的,接下来就是奔向最终效果了,正如我们一开始看到的那样,有点像我们使用360卫士清理垃圾时的类似效果,当然不是很像啦:

        .circleProgress_wrapper{            width: 200px;            height: 200px;            margin: 50px auto;            position: relative;            border:1px solid #ddd;        }        .wrapper{            width: 100px;            height: 200px;            position: absolute;            top:0;            overflow: hidden;        }        .right{            right:0;        }        .left{            left:0;        }        .circleProgress{            width: 160px;            height: 160px;            border:20px solid rgb(232, 232, 12);            border-radius: 50%;            position: absolute;            top:0;            -webkit-transform: rotate(45deg);        }        .rightcircle{            border-top:20px solid green;            border-right:20px solid green;            right:0;            -webkit-animation: circleProgressLoad_right 5s linear infinite;        }        .leftcircle{            border-bottom:20px solid green;            border-left:20px solid green;            left:0;            -webkit-animation: circleProgressLoad_left 5s linear infinite;        }        @-webkit-keyframes circleProgressLoad_right{            0%{                border-top:20px solid #ED1A1A;                border-right:20px solid #ED1A1A;                -webkit-transform: rotate(45deg);            }            50%{                border-top:20px solid rgb(232, 232, 12);                border-right:20px solid rgb(232, 232, 12);                border-left:20px solid rgb(81, 197, 81);                border-bottom:20px solid rgb(81, 197, 81);                -webkit-transform: rotate(225deg);            }            100%{                border-left:20px solid green;                border-bottom:20px solid green;                -webkit-transform: rotate(225deg);            }        }        @-webkit-keyframes circleProgressLoad_left{            0%{                border-bottom:20px solid #ED1A1A;                border-left:20px solid #ED1A1A;                -webkit-transform: rotate(45deg);            }            50%{                border-bottom:20px solid rgb(232, 232, 12);                border-left:20px solid rgb(232, 232, 12);                border-top:20px solid rgb(81, 197, 81);                border-right:20px solid rgb(81, 197, 81);                -webkit-transform: rotate(45deg);            }            100%{                border-top:20px solid green;                border-right:20px solid green;                border-bottom:20px solid green;                border-left:20px solid green;                -webkit-transform: rotate(225deg);            }        }				

可以看到,其实就是多了一些改变不同边框颜色的动画而已,这个就给大家自己去实践吧! 主要还是利用两个矩形来完成这么一个圆形进度条效果,特别注意overflow这条规则,起着关键作用。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
HTML與CSS vs. JavaScript:比較概述HTML與CSS vs. JavaScript:比較概述Apr 16, 2025 am 12:04 AM

HTML、CSS和JavaScript在網頁開發中的角色分別是:HTML負責內容結構,CSS負責樣式,JavaScript負責動態行為。 1.HTML通過標籤定義網頁結構和內容,確保語義化。 2.CSS通過選擇器和屬性控製網頁樣式,使其美觀易讀。 3.JavaScript通過腳本控製網頁行為,實現動態和交互功能。

HTML:是編程語言還是其他?HTML:是編程語言還是其他?Apr 15, 2025 am 12:13 AM

HTMLISNOTAPROGRAMMENGUAGE; ITISAMARKUMARKUPLAGUAGE.1)htmlStructures andFormatSwebContentusingtags.2)itworkswithcsssforstylingandjavascript for Interactivity,增強WebevebDevelopment。

HTML:建立網頁的結構HTML:建立網頁的結構Apr 14, 2025 am 12:14 AM

HTML是構建網頁結構的基石。 1.HTML定義內容結構和語義,使用、、等標籤。 2.提供語義化標記,如、、等,提升SEO效果。 3.通過標籤實現用戶交互,需注意表單驗證。 4.使用、等高級元素結合JavaScript實現動態效果。 5.常見錯誤包括標籤未閉合和屬性值未加引號,需使用驗證工具。 6.優化策略包括減少HTTP請求、壓縮HTML、使用語義化標籤等。

從文本到網站:HTML的力量從文本到網站:HTML的力量Apr 13, 2025 am 12:07 AM

HTML是一種用於構建網頁的語言,通過標籤和屬性定義網頁結構和內容。 1)HTML通過標籤組織文檔結構,如、。 2)瀏覽器解析HTML構建DOM並渲染網頁。 3)HTML5的新特性如、、增強了多媒體功能。 4)常見錯誤包括標籤未閉合和屬性值未加引號。 5)優化建議包括使用語義化標籤和減少文件大小。

了解HTML,CSS和JavaScript:初學者指南了解HTML,CSS和JavaScript:初學者指南Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

HTML的角色:構建Web內容HTML的角色:構建Web內容Apr 11, 2025 am 12:12 AM

HTML的作用是通過標籤和屬性定義網頁的結構和內容。 1.HTML通過到、等標籤組織內容,使其易於閱讀和理解。 2.使用語義化標籤如、等增強可訪問性和SEO。 3.優化HTML代碼可以提高網頁加載速度和用戶體驗。

HTML和代碼:仔細觀察術語HTML和代碼:仔細觀察術語Apr 10, 2025 am 09:28 AM

htmlisaspecifictypefodyfocusedonstructuringwebcontent,而“代碼” badlyLyCludEslanguagesLikeLikejavascriptandPytyPythonForFunctionality.1)htmldefineswebpagertuctureduseTags.2)“代碼”代碼“ code” code code code codeSpassSesseseseseseseseAwiderRangeLangeLangeforLageforLogageforLogicIctInterract

HTML,CSS和JavaScript:Web開發人員的基本工具HTML,CSS和JavaScript:Web開發人員的基本工具Apr 09, 2025 am 12:12 AM

HTML、CSS和JavaScript是Web開發的三大支柱。 1.HTML定義網頁結構,使用標籤如、等。 2.CSS控製網頁樣式,使用選擇器和屬性如color、font-size等。 3.JavaScript實現動態效果和交互,通過事件監聽和DOM操作。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具