基于svg的环形进度条

其实需求是这么一个基于日期的环形进度条,开始用css3写了一下感觉太麻烦了,于是抽了点时间用svg画了一个。
不多说 上代码:
css:
<style>
circle {
-webkit-transition: stroke-dasharray .25s;
transition: stroke-dasharray .25s;
}
</style> html:
<div id="div1" style="width:150px;height:150px;position: relative;">
<svg width="150" height="150" viewbox="0 0 300 300">
<circle cx="150" cy="150" r="130" stroke-width="20" stroke="#f2f2f2" fill="none"></circle>
<circle cx="150" cy="150" r="130" stroke-width="20" stroke="#4d91ee" fill="none" transform="matrix(0,-1,1,0,0,300)"></circle>
</svg>
<span id="t" style="color:#4d91ee;position: absolute; top: 50%;left:50%;">70</span>
</div> js:
//获取当前时间设置为开始时间,年月日
var StartDate = new Date(), StartYear = 2016, StartMonth = 1, StartDay = 2;
// var StartDate = new Date(), StartYear = StartDate.getFullYear(), StartMonth = StartDate.getMonth() + 1, StartDay = StartDate.getDate();
//设置结束时间,年月日(结束时间为6月30日)
var EndDate = new Date(), EndYear = 2016, EndMonth = 6, EndDay = 30;
// var EndDate = new Date(), EndYear = EndDate.getFullYear(), EndMonth = 6, EndDay = 30;
var MinStartTime=StartYear + '-1-1';//设置最小时间
MinStartTime = MinStartTime.replace(/-/g, '/');
MinStartTime = new Date(MinStartTime); var StartTime = StartYear + '-' + StartMonth + '-' + StartDay;
StartTime = StartTime.replace(/-/g, '/');
StartTime = new Date(StartTime);
var EndTime = EndYear + '-' + EndMonth + '-' + EndDay;
EndTime = EndTime.replace(/-/g, "/");
EndTime = new Date(EndTime); // 一天有多少毫秒
var dOfMs = (24 * 60 * 60 * 1000);
// time1 距离起始日期多少天
var diff1 = (StartTime.getTime() );
// time2 距离起始日期多少天
var diff2 = (EndTime.getTime() ); var diff3 = (MinStartTime.getTime() );
// 计算差值
var MaxdiffDay=parseInt(diff2 - diff3) / dOfMs; var diffDay = parseInt(diff2 - diff1) / dOfMs;
diffDay = diffDay>0 ? diffDay : StartYear-1+"年度年报征集已于6月30日结束";
$("#t").html(diffDay)
var r=130, range = diffDay ;
draw(range,r,MaxdiffDay) });
function draw(range,r,MaxdiffDay) {
var circle = document.querySelectorAll("circle")[1];//获取svg中的circle
if (circle) {
var percent = range / MaxdiffDay, perimeter = Math.PI * 2 * r;
circle.setAttribute('stroke-dasharray', perimeter * percent + " " + perimeter * (1- percent));
}
}
基于svg的环形进度条的更多相关文章
- 用svg实现一个环形进度条
svg实现环形进度条需要用到的知识: 1.会使用path的d属性画一个圆环 //用svg的path元素的A命令画圆 <path d=" M cx cy m 0 -r a r r 0 1 ...
- 环形进度条的实现方法总结和动态时钟绘制(CSS3、SVG、Canvas)
缘由: 在某一个游戏公司的笔试中,最后一道大题是,“用CSS3实现根据动态显示时间和环形进度[效果如下图所示],且每个圆环的颜色不一样,不需要考虑IE6~8的兼容性”.当时第一想法是用SVG,因为SV ...
- 【css】如何实现环形进度条
最近团队的童鞋接到了一个有关环形进度条的需求,想要还原一个native的沿环轨迹渐变进度条的效果,看到这个效果的时候,笔者陷入了沉思.. 环形进度条的效果,最先想到的就是使用CSS利用两个半圆的hac ...
- 类似 Dribbble 下载按钮的 SVG 弹性动画进度条
Codrops 发布了一个如何创建一个基于弹性效果的 SVG 加载进度条教程,基于 SVG 和 TweenMax 实现.按钮开始的时候是一个带有箭头的图标,一旦它被点击,动画成一个有趣的小金属丝和一个 ...
- 图解CSS3制作圆环形进度条的实例教程
圆环形进度条制作的基本思想还是画出基本的弧线图形,然后CSS3中我们可以控制其旋转来串联基本图形,制造出部分消失的效果,下面就来带大家学习图解CSS3制作圆环形进度条的实例教程 首先,当有人说你能不能 ...
- iOS带动画的环形进度条(进度条和数字同步)
本篇写的是实现环形进度条,并带动画效果,要实现这些,仅能通过自己画一个 方法直接看代码 为了方便多次调用,用继承UIView的方式 .m文件 #import <UIKit/UIKit.h> ...
- iOS 开发技巧-制作环形进度条
有几篇博客写到了怎么实现环形进度条,大多是使用Core Graph来实现,实现比较麻烦且效率略低,只是一个小小的进度条而已,我们当然是用最简单而且效率高的方式来实现. 先看一下这篇博客,博客地址:ht ...
- iOS一分钟学会环形进度条
有几篇博客写到了怎么实现环形进度条,大多是使用Core Graph来实现,实现比较麻烦且效率略低,只是一个小小的进度条而已,我们当然是用最简单而且效率高的方式来实现.先看一下这篇博客,博客地址:htt ...
- Swift - 环形进度条(UIActivityIndicatorView)的用法
Swift中,除了条形进度条外,还有环形进度条,效果图如下: 1,环形进度条的基本属性 (1)Style: Large White:比较大的白色环形进度条 White:白色环形进度条 Gray:灰色环 ...
随机推荐
- C#数据结构与算法系列(三):队列
1.介绍 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则,即:先存入队列的数据,要先取出.后存入的要后取出 队列是属于线性结构中的一种 2.图示 3.通过数组实现 public ...
- 综合练习: PIVOT、UNPIVOT、GROUPING SETS、GROUPING_ID_1
综合练习: PIVOT.UNPIVOT.GROUPING SETS.GROUPING_ID 问题1:Desired output: empid cnt2007 cnt2008 cnt2009 ---- ...
- TensorFlow从0到1之TensorFlow多层感知机实现MINIST分类(22)
TensorFlow 支持自动求导,可以使用 TensorFlow 优化器来计算和使用梯度.它使用梯度自动更新用变量定义的张量.本节将使用 TensorFlow 优化器来训练网络. 前面章节中,我们定 ...
- 从零开始的Spring Boot(4、Spring Boot整合JSP和Freemarker)
Spring Boot整合JSP和Freemarker 写在前面 从零开始的Spring Boot(3.Spring Boot静态资源和文件上传) https://www.cnblogs.com/ga ...
- 对 JsonConvert 的认识太肤浅了,终于还是遇到了问题
一:背景 1. 讲故事 在开始本文之前,真的好想做个问卷调查,到底有多少人和我一样,对 JsonConvert 的认识只局限在 SerializeObject 和 DeserializeObject ...
- Python数据可视化实战:实时更新海外疫情数据,实现数据可视化
前言 我国的疫情已经得到了科学的控制,开始了全面的复工复产,但是国外的疫情却“停不下来”.国外现在可谓就是处于水深火热当中啊,病毒极强的传染性,导致了许多的人都“中招”了,我国已经全面复工复产了,人大 ...
- android屏幕适配的全攻略--支持不同的屏幕尺寸适配平板和手机
一. 核心概念与单位详解 1. 什么是屏幕尺寸.屏幕分辨率.屏幕像素密度? 屏幕分辨率越大,手机越清晰 dpi就是dot per inch dot意思是点,就是每英寸上面的像素点数 android原始 ...
- jQuery实现全选、反选、删除
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...
- MySQL高级用法
-- 关联查询-- select * from Goods_BomItems s,Goods_Bom t where t.GoodsBomId = s.GoodsBomId and t.GoodsBo ...
- 报错 version `GLIBCXX_3.4.22' not found
from . import pypocketfft as pfft ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GL ...