`

利用jQuery和CSS实现环形进度条

css 
阅读更多

http://www.w3cplus.com/css3/create-radial-progress-bar-with-jQuery-and-css3.html

 

最近项目里遇到一个有意思的效果,那就是圆形进度条,类似于这样的:

利用jQuery和CSS实现环形进度条

demo1demo2

<iframe id="cproIframe_u1490106_1" style="box-sizing: inherit;" src="http://pos.baidu.com/acom?adn=0&amp;at=128&amp;aurl=&amp;cad=1&amp;ccd=24&amp;cec=UTF-8&amp;cfv=18&amp;ch=0&amp;col=zh-CN&amp;conOP=0&amp;cpa=1&amp;dai=1&amp;dis=0&amp;layout_filter=rank%2Cimage&amp;ltr=&amp;ltu=http%3A%2F%2Fwww.w3cplus.com%2Fcss3%2Fcreate-radial-progress-bar-with-jQuery-and-css3.html&amp;lunum=6&amp;n=01006029_cpr&amp;pcs=1349x667&amp;pis=10000x10000&amp;ps=655x30&amp;psr=1366x768&amp;pss=1349x766&amp;qn=8cc5d61307d08b98&amp;rad=&amp;rsi0=468&amp;rsi1=60&amp;rsi5=4&amp;rss0=&amp;rss1=&amp;rss2=&amp;rss3=&amp;rss4=&amp;rss5=&amp;rss6=&amp;rss7=&amp;scale=&amp;skin=tabcloud_skin_6&amp;stid=5&amp;td_id=1490106&amp;tn=baiduCustSTagLinkUnit&amp;tpr=1436791354950&amp;ts=1&amp;version=2.0&amp;xuanting=0&amp;dtm=BAIDU_DUP2_SETJSONADSLOT&amp;dc=2&amp;di=u1490106&amp;ti=%E5%88%A9%E7%94%A8jQuery%E5%92%8CCSS%E5%AE%9E%E7%8E%B0%E7%8E%AF%E5%BD%A2%E8%BF%9B%E5%BA%A6%E6%9D%A1%20%7C%20css3%E6%95%99%E7%A8%8B-css3%E5%AE%9E%E4%BE%8B-css3%E5%8A%A8%E7%94%BB%20%7C%20W3CPlus&amp;tt=1436791354687.267.450.462" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" align="center,center" width="468" height="60"></iframe>

实现类似这样的效果方法很多。我主要想了2个解决方案,都是通过jQuery和CSS实现的,下面就一一道来:

方法一:jQuery + CSS3

实现原理

原理非常的简单,在这个方案中,最主要使用了CSS3的transform中的rotate和CSS3的clip两个属性。用他们来实现半圆和旋转效果。

半环的实现

先来看其结构。

HTML

<div class="pie_right">
    <div class="right"></div>
    <div class="mask"><span>0</span>%</div>
</div>

结构非常简单。这样的结构,大家一看就清楚。

CSS

.pie_right {
    width:200px; 
    height:200px;
    position: absolute;
    top: 0;
    left: 0;
    background:#0cc;
}
.right {
    width:200px; 
    height:200px;
    background:#00aacc;
    border-radius: 50%;
    position: absolute;  
    top: 0;
    left: 0;
}
.pie_right, .right {
    clip:rect(0,auto,auto,100px);
}
.mask {
    width: 150px;
    height: 150px;
    border-radius: 50%;
    left: 25px;
    top: 25px;      
    background: #FFF;
    position: absolute;
    text-align: center;
    line-height: 150px;
    font-size: 20px;
    background: #0cc;
    /* mask 是不需要剪切的,此处只是为了让大家看到效果*/
    clip:rect(0,auto,auto,75px); }

实现半圆还是挺简单的,利用border-radius做出圆角,然后利用clip做出剪切效果,(clip使用方法,详见站内介绍),mask的部分是为了遮挡外面的容器,致使在视觉上产生圆环的效果:

利用jQuery和CSS实现环形进度条

旋转的话,那更容易实现了,就是在CSS的right中加入(我没做浏览器兼容代码,请大家自行加入):

.right {
    transform: rotate(30deg);
}

利用jQuery和CSS实现环形进度条

这样就可以看到一个半弧旋转的效果了。

整环的实现

同样道理,拼接左半边圆环,为了让我们html结构更易懂以后写js更简便,我对结构做了一下改造,并作了效果优化:

HTML

<div class="circle">
    <div class="pie_left"><div class="left"></div></div>
    <div class="pie_right"><div class="right"></div></div>
    <div class="mask"><span>0</span>%</div>
</div>

CSS

.circle {
    width: 200px;
    height: 200px;  
    position: absolute;
    border-radius: 50%;
    background: #0cc;
}
.pie_left, .pie_right {
    width: 200px; 
    height: 200px;
    position: absolute;
    top: 0;left: 0;
}
.left, .right {
    display: block;
    width:200px; 
    height:200px;
    background:#00aacc;
    border-radius: 50%;
    position: absolute;
    top: 0;
    left: 0;
    transform: rotate(30deg);
}
.pie_right, .right {
    clip:rect(0,auto,auto,100px);
}
.pie_left, .left {
    clip:rect(0,100px,auto,0);
}
.mask {
    width: 150px;
    height: 150px;
    border-radius: 50%;
    left: 25px;
    top: 25px;
    background: #FFF;
    position: absolute;
    text-align: center;
    line-height: 150px;
    font-size: 16px;
}

效果如下:

利用jQuery和CSS实现环形进度条

圆环最终效果

Ok了,基本上我们的圆环已经实现完成了,下面是加入JS效果。

首先,我们需要考虑的是,圆环的转动幅度大小,是由圆环里面数字的百分比决定的,从0%-100%,那么圆弧被分成了每份3.6°;而在180°,也就是50%进度之前,左侧的半弧是不动的,当超过50%,左边的半弧才会有转动显示。

那么,原理明确之后,其jQuery代码如下(删除CSS中的旋转效果,在JS里重写):

$(function() {
    $('.circle').each(function(index, el) {
        var num = $(this).find('span').text() * 3.6;
        if (num<=180) {
            $(this).find('.right').css('transform', "rotate(" + num + "deg)");
        } else {
            $(this).find('.right').css('transform', "rotate(180deg)");
            $(this).find('.left').css('transform', "rotate(" + (num - 180) + "deg)");
        };
    });

});

则,改变mask里面的span 的数值,我们就会看到最终效果。

利用jQuery和CSS实现环形进度条

这样我们只要从后台获取当前流程的进度值,传给span,那么我们页面上就能看到这样圆环的进度效果啦。

jQuery + 图片

实现原理

这种方法相对来说就比较简单了,但是也是挺麻烦的一种。

首先,我们需要一个非常冗长的一个图片……图片的内容,就是每1°旋转角度,就是一张图片…100张…

例如:

利用jQuery和CSS实现环形进度条

然后让容器为这个图片为背景,理由用background-position写100个类样式做背景偏移…很累啊….进度每改变一下,就引用相对应的类。

HTML

我们类似于有这样的一个结构,当然这里面有很多个这样的结构:

<div class="progressbar">
    <span>0</span>%     
</div>

比如说我们的案例的中结构:

<div class="progressbar">
    <span>10</span>%        
</div>
<div class="progressbar">
    <span>20</span>%        
</div>
<div class="progressbar">
    <span>30</span>%        
</div>
<div class="progressbar">
    <span>50</span>%        
</div>
<div class="progressbar">
    <span>70</span>%        
</div>
<div class="progressbar">
    <span>90</span>%        
</div>
<div class="progressbar">
    <span>100</span>%       
</div>

CSS

样式是比较苦逼的事情,我们需要在每个位置修改他的background-position。也就是从0%~100%,将会有100个:

.progressbar {
    text-align: center;
    line-height: 44px; 
    width: 44px; 
    display: block; 
    background: url(progressbar.png); 
    height: 44px; 
    font-size: 14px; 
    margin-left:60px;
}
.progressbar-1 {background-position: 0px 0px;}
.progressbar-2 {background-position: -54px 0px;}
.progressbar-3 {background-position: -108px 0px;}
.progressbar-4 {background-position: -162px 0px;}
.progressbar-5 {background-position: -216px 0px;}
.progressbar-6 {background-position: -270px 0px;}
.progressbar-7 {background-position: -324px 0px;}
.progressbar-8 {background-position: -378px 0px;}
.progressbar-9 {background-position: -432px 0px;}
.progressbar-10 {background-position: -486px 0px;}
.progressbar-11 {background-position: -540px 0px;}
.progressbar-12 {background-position: -594px 0px;}
.progressbar-13 {background-position: -648px 0px;}
.progressbar-14 {background-position: -702px 0px;}
.progressbar-15 {background-position: -756px 0px;}
.progressbar-16 {background-position: -810px 0px;}
.progressbar-17 {background-position: -864px 0px;}
.progressbar-18 {background-position: -918px 0px;}
.progressbar-19 {background-position: -972px 0px;}
.progressbar-20 {background-position: -1026px 0px;}
.progressbar-21 {background-position: -1080px 0px;}
.progressbar-22 {background-position: -1134px 0px;}
.progressbar-23 {background-position: -1188px 0px;}
.progressbar-24 {background-position: -1242px 0px;}
.progressbar-25 {background-position: -1296px 0px;}
.progressbar-26 {background-position: -1350px 0px;}
.progressbar-27 {background-position: -1404px 0px;}
.progressbar-28 {background-position: -1458px 0px;}
.progressbar-29 {background-position: -1512px 0px;}
.progressbar-30 {background-position: -1566px 0px;}
.progressbar-31 {background-position: -1620px 0px;}
.progressbar-32 {background-position: -1674px 0px;}
.progressbar-33 {background-position: -1728px 0px;}
.progressbar-34 {background-position: -1782px 0px;}
.progressbar-35 {background-position: -1836px 0px;}
.progressbar-36 {background-position: -1890px 0px;}
.progressbar-37 {background-position: -1944px 0px;}
.progressbar-38 {background-position: -1998px 0px;}
.progressbar-39 {background-position: -2052px 0px;}
.progressbar-40 {background-position: -2106px 0px;}
.progressbar-41 {background-position: -2160px 0px;}
.progressbar-42 {background-position: -2214px 0px;}
.progressbar-43 {background-position: -2268px 0px;}
.progressbar-44 {background-position: -2322px 0px;}
.progressbar-45 {background-position: -2376px 0px;}
.progressbar-46 {background-position: -2430px 0px;}
.progressbar-47 {background-position: -2484px 0px;}
.progressbar-48 {background-position: -2538px 0px;}
.progressbar-49 {background-position: -2592px 0px;}
.progressbar-50 {background-position: -2700px 0px;}
.progressbar-51 {background-position: -2754px 0px;}
.progressbar-52 {background-position: -2808px 0px;}
.progressbar-53 {background-position: -2862px 0px;}
.progressbar-54 {background-position: -2916px 0px;}
.progressbar-55 {background-position: -2970px 0px;}
.progressbar-56 {background-position: -3024px 0px;}
.progressbar-57 {background-position: -3078px 0px;}
.progressbar-58 {background-position: -3132px 0px;}
.progressbar-59 {background-position: -3186px 0px;}
.progressbar-60 {background-position: -3240px 0px;}
.progressbar-61 {background-position: -3294px 0px;}
.progressbar-62 {background-position: -3348px 0px;}
.progressbar-63 {background-position: -3402px 0px;}
.progressbar-64 {background-position: -3456px 0px;}
.progressbar-65 {background-position: -3510px 0px;}
.progressbar-66 {background-position: -3564px 0px;}
.progressbar-67 {background-position: -3618px 0px;}
.progressbar-68 {background-position: -3672px 0px;}
.progressbar-69 {background-position: -3726px 0px;}
.progressbar-70 {background-position: -3780px 0px;}
.progressbar-71 {background-position: -3834px 0px;}
.progressbar-72 {background-position: -3888px 0px;}
.progressbar-73 {background-position: -3942px 0px;}
.progressbar-74 {background-position: -3996px 0px;}
.progressbar-75 {background-position: -4050px 0px;}
.progressbar-76 {background-position: -4104px 0px;}
.progressbar-77 {background-position: -4158px 0px;}
.progressbar-78 {background-position: -4212px 0px;}
.progressbar-79 {background-position: -4266px 0px;}
.progressbar-80 {background-position: -4320px 0px;}
.progressbar-81 {background-position: -4376px 0px;}
.progressbar-82 {background-position: -4428px 0px;}
.progressbar-83 {background-position: -4482px 0px;}
.progressbar-84 {background-position: -4536px 0px;}
.progressbar-85 {background-position: -4590px 0px;}
.progressbar-86 {background-position: -4644px 0px;}
.progressbar-87 {background-position: -4698px 0px;}
.progressbar-88 {background-position: -4752px 0px;}
.progressbar-89 {background-position: -4806px 0px;}
.progressbar-90 {background-position: -4860px 0px;}
.progressbar-91 {background-position: -4914px 0px;}
.progressbar-92 {background-position: -4968px 0px;}
.progressbar-93 {background-position: -5022px 0px;}
.progressbar-94 {background-position: -5076px 0px;}
.progressbar-95 {background-position: -5130px 0px;}
.progressbar-96 {background-position: -5184px 0px;}
.progressbar-97 {background-position: -5238px 0px;}
.progressbar-98 {background-position: -5292px 0px;}
.progressbar-99 {background-position: -5346px 0px;}
.progressbar-100 {background-position: -5400px 0px;}

JavaScript

当然,在这个效果中,我们也离不开JavaScript:

$(function() {
    $('.progressbar').each(function(index, el) {
        var num = $(this).find('span').text();
        $(this).addClass('progressbar-' + num);
    });
});

效果如下:

利用jQuery和CSS实现环形进度条

虽然这种方法虽然比较繁琐比较麻烦,但是实现出来的效果,也较纯css3的丰富,兼容性也更好。

到这里,这个案例算是完成,看大家倾向于那种效果吧,个人感觉各有利弊各有春秋。如果有更好的方法和思路,欢迎大家一起讨论。

分享到:
评论

相关推荐

    Jquery+css实现环形进度

    本项目是利用JavaScript的jQuery库和CSS样式来实现环形进度条的动态效果。下面我们将详细探讨如何通过jQuery和CSS实现环形进度条及其相关知识点。 首先,jQuery是一个强大的JavaScript库,它简化了DOM操作、事件...

    jQuery+CSS3实现的双层圆环形进度条加载动画特效.zip

    在本资源中,"jQuery+CSS3实现的双层圆环形进度条加载动画特效.zip",开发者利用了JavaScript库jQuery以及CSS3的强大功能,创建了一个引人注目的双层圆环形进度条加载动画效果。这个效果可以广泛应用于网页加载、...

    网页模板——jQuery+CSS3实现的双层圆环形进度条加载动画特效.zip

    总结来说,"jQuery+CSS3实现的双层圆环形进度条加载动画特效"是一个融合了动态效果和视觉设计的网页模板,它利用jQuery的灵活性和CSS3的强大动画功能,创造出吸引用户的互动体验。对于前端开发者来说,理解和掌握...

    jquery css3进度条加载动画特效

    标题中的“jQuery CSS3进度条加载动画特效”指的是利用JavaScript库jQuery和CSS3技术来创建一种视觉效果,即在网页内容加载时显示的进度条。这种特效可以提供用户反馈,表明页面正在加载,并且增加了用户体验的互动...

    环形进度条(兼容IE7+)

    总结来说,这个项目利用了JavaScript库(如jQuery和Raphael.js)以及HTML和CSS,创建了一个在IE7及以上版本的浏览器中都能正常工作的环形进度条。通过`index.html`构建界面,`jquery.js`和`cycle.js`控制行为,`...

    环形进度条环形进度条环形进度条

    在实现环形进度条时,开发者通常会使用HTML、CSS和JavaScript技术。CSS3提供了强大的样式和动画功能,可以创建出动态的环形效果。例如,通过使用`border-radius`属性创建圆角,`rotate`和`transform`属性进行旋转,...

    jQuery炫酷时尚彩色条纹进度条插件

    这款插件基于jQuery构建,意味着开发者可以利用jQuery的强大功能来实现进度条的动态效果和灵活配置。 ### 二、进度条样式与动画 1. **彩色条纹**:插件提供了多种颜色组合,可以创建出丰富多彩的条纹效果,使得...

    JS实现环形进度条(从0到100%)效果

    综上所述,通过上述的HTML结构、CSS样式以及JavaScript技术(特别是利用jQuery和专门的radialIndicator插件),可以实现一个美观且实用的环形进度条效果。这不仅为用户提供了更好的交互体验,同时也为开发者提供了...

    jQuery圆环形进度条特效.zip

    本篇文章将详细解析如何使用jQuery和相关CSS技术实现一个圆环形进度条特效。 首先,我们了解圆环形进度条的基本构成。一个圆环形进度条通常由两部分组成:背景圆环和填充的进度圆环。背景圆环代表100%的总量,而...

    基于jquery+css3实现的13种动感页面加载动画特效源码.zip

    1. **环形进度条**:通过CSS3的stroke-dasharray和stroke-dashoffset属性,配合jQuery改变这两个值,可以创建一个动态填充的环形进度条,展示页面加载的进度。 2. **旋转方块**:利用CSS3的transform属性实现方块的...

    环形的百分比进度条

    1. **动画效果**:为了让用户体验更佳,环形进度条往往伴随着平滑的动画效果,即百分比的增加或减少伴随着颜色填充的动态变化,这需要开发者掌握CSS3的动画技术或者JavaScript的帧动画实现。 2. **响应式设计**:...

    canvas绘制环形进度条

    以下是如何利用`canvas`实现这一功能的详细步骤和相关知识点: 1. **HTML结构**: 首先,我们需要在HTML文档中创建一个`canvas`元素,它将作为绘制环形进度条的画布。同时,为了提供数据,我们还需要设置一些...

    jQuery带圆形进度条倒计时

    总的来说,"jQuery带圆形进度条倒计时"是通过结合HTML、CSS和jQuery,创建一个具有视觉吸引力且功能实用的倒计时组件,它不仅能够实时显示剩余时间,还可以通过圆形进度条直观地展示时间流逝的过程。这个技术在许多...

    13种CSS3网页加载进度条.zip

    除了基本的CSS3技术,JavaScript和jQuery在实时更新进度条和响应用户交互方面起着关键作用。 4. JavaScript:通过JavaScript,我们可以获取服务器返回的数据加载进度,并将这些信息传递给CSS。例如,设置一个...

    CSS3结合jQuery实现动态圆环的图形示例代码.rar

    同时,利用`linear-gradient`可以创建出环形渐变效果,模拟出进度条的感觉。例如: ```css .circle { width: 200px; height: 200px; border-radius: 50%; background: linear-gradient(90deg, red 50%, ...

    jQuery流程步骤进度条网页特效

    总的来说,这个"jQuery流程步骤进度条网页特效"是一个结合了HTML结构、CSS样式和jQuery交互的实例,它展示了如何利用这些技术来提升用户体验,特别是在多步骤流程的网页应用中。通过理解并实践这个特效,开发者可以...

    基于jQuery实现的8种fakeloader页面加载等待特效源码.zip

    4. **文字滚动加载**:利用jQuery的fadeIn()和fadeOut()方法,配合CSS3的text-indent属性,可以实现文字逐字滚动显示,创造出引人注目的加载效果。 5. **立方体旋转**:这种特效通过变换元素的尺寸和角度,利用CSS3...

    进度条插件

    进度条有多种样式,包括线性进度条和环形进度条,以及可定制的颜色、宽度和动画效果。 接下来,我们要提到的是jQuery,这是一个广泛使用的JavaScript库,简化了HTML文档遍历、事件处理、动画和Ajax交互等任务。...

    14种WEB常见进度条

    6. **动画进度条**:利用CSS3动画或JavaScript实现动态效果,增加交互性和趣味性。可以是渐变填充、脉冲效果等,适用于吸引用户的注意力。 7. **阶梯式进度条**:将整个过程分解为多个步骤,每个步骤对应一个进度条...

    jQuery实现的个性圆圈倒计时特效源码.zip

    在jQuery中,我们可以利用定时器(setTimeout或setInterval)结合CSS3的动画效果来实现这个特效。首先,创建一个HTML元素,如SVG或者canvas,作为圆圈的基础容器。然后,通过CSS定义圆圈的基本样式,包括半径、颜色...

Global site tag (gtag.js) - Google Analytics