svg和css3创建环形渐变进度条

在负责的项目中,有一个环形渐变读取进度的效果的需求,于是在网上查阅相关资料整理一下。
代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
<body>
  <div class="donut">
    <svg width="340" height="340" xmlns="http://www.w3.org/2000/svg" class="donut_svg">
      <circle r="150" cy="170" cx="170" stroke-width="10" stroke="#FAFAFA" fill="none" />
      <circle class="circle_bar" r="150" cy="170" cx="170" stroke-width="35" stroke="url(#linearGradient)" stroke-linejoin="round" stroke-linecap="round" fill="none"/>
      <circle class="dot" fill="#FFFFFF" fill-rule="nonzero" cx="320" cy="170" r="12"></circle>
      <defs>
        <linearGradient x1="0%" y1="80.9878035%" x2="96.9769965%" y2="41.7547666%" id="linearGradient">
          <stop stop-color="#18A6FF" offset="0%"></stop>
          <stop stop-color="#32B7FF" offset="52.7095376%"></stop>
          <stop stop-color="#0094F1" offset="100%"></stop>
        </linearGradient>
      </defs>
    </svg>
    <div class="donut_copy">
      <div class="donut_title">
        <span class="js-donut-figure"></span><span class="donut_spic">%</span>
      </div>
    </div>
  </div>
  <script type="text/javascript">
    window.onload=function () {
      ‘use strict‘;
      var ProgressCircle = (function () {
        function ProgressCircle(percent,radius,elementClass){
         this._percent = percent;  //百分比
         this._radius = radius;    //圆的半径
         this._elementClass = elementClass;
       }

       ProgressCircle.prototype.calcDashOffset = function () {
         var circumference;
           circumference = Math.PI * (2 * this._radius);   //计算圆圈的周长
           return Math.round(circumference - this._percent / 100 * circumference);  //计算圆圈要渲染的 长度!
         }

        //渲染进度条
        ProgressCircle.prototype.createCSS = function() {
          return $("." + this._elementClass + " .circle_bar").css(‘stroke-dashoffset‘, this.calcDashOffset());
        };
        //读取效果
        ProgressCircle.prototype.updateText = function () {
          $("." + this._elementClass + " .js-donut-figure")[0].innerText = this._percent;
        }

        ProgressCircle.prototype.init = function() {
          var _this = this;
          setTimeout(function(){
            _this.updateText();
            return _this.createCSS();
          },1000);
        };
        return ProgressCircle;
      })();

      let progress = new ProgressCircle(50, 150, ‘donut‘);
      progress.init();
    }
  </script>
  <style type="text/css" lang="scss">
  *{
    padding:0;
    margin:0
  }
  .donut{
    position: relative;
  }
  .circle_warp{
    position: relative;
    top: 0;
    left: 0
  }
  .circle_bar {
    stroke-dasharray: 942.4777960769379;  //计算整个圆周的周长公式为Circumstance=2*PI*Radius  2*3.14*半径(此时是半径是150)
    stroke-dashoffset: 942.4777960769379;
    transition: stroke-dashoffset 1200ms cubic-bezier(.99,.01,.62,.94);
  }
  .donut_svg{
    transform: rotate(-90deg);
  }
  .donut_copy{
    text-align: center;
    width: 340px;
    height: 340px;
    top: 40%;
    left: 0;
    position: absolute;
  }
  .donut_title{
    opacity: 0;
    font-size: 42px;
    color: #171717;
    margin-bottom: 2px;
    animation: donutTitleFadeLeft 800ms 200ms cubic-bezier(.99,.01,.22,.94) forwards;
    transform: translateX(0);
    font-weight: bold;
  }
  .donut_spic{
    content: "%";
    animation: donutTitleFadeRight 800ms 200ms cubic-bezier(.99,.01,.22,.94) forwards;
    opacity: 0;
    transform: translateY(-20px);
  }
  .donut__text p{
    font-size: 16px;
    color: #AAAAAA;
  }
  @keyframes donutTitleFadeLeft {
    from {
      opacity: 0;
      transform: translateX(0);
    }

    to {
      opacity: 1;
      transform: translateX(10px);
    }
  }

  @keyframes donutTitleFadeRight {
    from {
      opacity: 0;
      transform: translateX(-30px);
    }
    to {
      opacity: 1;
      transform: translateX(0);
    }
  }
</style>
</html>

原文地址:根据原文思路修改的代码来实现的效果,有兴趣的可以看下
http://www.techbrood.com/zh/n...

原文地址:https://www.cnblogs.com/baimeishaoxia/p/11808711.html

时间: 2024-09-29 02:01:22

svg和css3创建环形渐变进度条的相关文章

【iOS】环形渐变进度条实现

之前有人在找渐变进度条的效果,闲来无事就顺手写了一个,然后画了视图层级,方便讲解. 环境信息: Mac OS X 10.10.3 Xcode 6.3.1 iOS 8.3 效果图: 源码下载地址: https://github.com/saitjr/LoopProgressDemo.git 正文 一.视图层级 首先需要搞定的就是视图层级关系.可以看到, 1. 背景是有透明度的蓝色(blueView) 2. 需要一个从绿->黄->红的渐变色,那个这里我采用的是Layer(colorLayer) 3

基于css3的环形动态进度条(原创)

基于css3实现的环形动态加载条,也用到了jquery.当时的想法是通过两个半圆的转动,来实现相应的效果,其实用css3的animation也可以实现这种效果.之所以用jquery是因为通过jquery可以在网站中动态改变加载的百分比.同时,用如果单纯用css3的animation的话扩展性太差,因为你要先确定出百分比是多少,而如果百分比超过一半时,左边的半圆也需转动,单纯用animation就太复杂了. 另外,svg和canvas都可以实现这样的效果.canvas的话我感觉原理应该差不多.有人

自定义控件之圆形颜色渐变进度条--SweepGradient

前几天在群里面有人找圆形可颜色渐变进度条,其中主要的知识点是SweepGradient: mSweepGradient = new SweepGradient(240, 360, new int[] { Color.CYAN, Color.DKGRAY, Color.GRAY, Color.LTGRAY, Color.MAGENTA, Color.GREEN, Color.TRANSPARENT, Color.BLUE }, null); 如上:第三个参数为渐变颜色内容,前两个是坐标信息,240

android自定义渐变进度条

</pre>       项目中需要用到一个弧形渐变的进度条,通过android自带是不能实现的,我是没有找到实现的方法,有大神知道的可以指点,效果图是下面这样的<p></p><p><img src="" alt="" /><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAbcAAAClCAYAAADf/rPPAAAgAElEQ

iOS 渐变进度条

#import <UIKit/UIKit.h> @interface JianBianView : UIView //为了增加一个表示进度条的进行,可们可以使用mask属性来屏蔽一部分 @property (nonatomic, strong) CALayer *maskLayer; @property (nonatomic, assign) CGFloat progress; //动画方法 -(void)performAnimation; -(void)setProgress:(CGFloa

android自己定义渐变进度条

项目中须要用到一个弧形渐变的进度条,通过android自带是不能实现的.我是没有找到实现的方法,有大神知道的能够指点.效果图是以下这种 这是通过继承VIew来绘制出来的,网上也有相似的,可是代码那是相当的累赘,并且创建了非常多没用的对象,给内存管理带来负担? ?? 我在这把自己定义的View代码贴出来了,用到的话能够加以參考 public class SpringProgressView extends View { /** * 分段颜色 */ private static final int[

详解用CSS3制作圆形滚动进度条动画效果

内  容 先看一下效果图,会提升我们的学习兴趣哟: 对于圆形效果是重点,我将详细讲解. 第一种效果: 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:

Swift 圆形渐变进度条 支持事件 支持XIB和StoryBoard

最近项目用到了 一个经验条  要求颜色渐变  中间是用户头像  还要接受事件  然后自己写了个下面这个控件 // // XProgressView.swift // XProgressView // // Created by eduo_xiaoP on 15/4/11. // Copyright (c) 2015年 eduo. All rights reserved. // import Foundation import UIKit @objc protocol XProgressViewD

用css3写出来的进度条

夜深了,废话不多说,先上代码: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="js/jquery-2.1.3.min.js"></script>