html svg生成环形进度条的实现方法


Posted in HTML / CSS onSeptember 23, 2019

之前在项目中遇到一个环形进度条的需求,要求能实时更新进度,脑海中瞬间便蹦出css,svg,canvas3中方案,对于3种方案个人更偏向于svg,用法简单,代码量也很少,同时也便于实时控制。具体效果如下图:

html svg生成环形进度条的实现方法

代码非常简单:

<svg width="150px" height="150px" class="svg">
    <circle r="70" cy="75" cx="75" stroke-width="8" stroke="#EAEFF4" stroke-linejoin="round" stroke-linecap="round" fill="none"/>
    <circle class="progress" r="70" cy="75" cx="75" stroke-width="8" stroke="#1593FF" stroke-linejoin="round" stroke-linecap="round" fill="none" stroke-dashoffset="0px"  stroke-dasharray="471px" />
</svg>

为了便于演示,我们先用css动画控制:

svg {
    transform: rotate(-90deg);
}
.progress {
    animation: rotate 1500ms linear both;
}
@keyframes rotate {
    from {
        stroke-dashoffset: 471px;
    }
    to {
        stroke-dashoffset: 0px;
    }
}

实现原理

实现原理非常简单,就是应用svg的stroke-dashoffset和stroke-dasharray属性。

stroke-dasharray

官方解释为可控制用来描边的点划线的图案范式,即定义虚线每段长度即虚线间间隔,数与数之间用逗号或者空白隔开,指定短划线和缺口的长度。如果提供了奇数个值,则这个值的数列重复一次,从而变成偶数个值。

stroke-dashoffset

标识的是整个路径的偏移值。

通过控制虚线的间隔与偏移值,便可以行程各种各样的线条动画,当然我们还可以通过js控制,如下:

let path = document.querySelector('#path');
// 可获取路径的长度
let len = path.getTotalLength();
path.style.cssText = `stroke-dasharray:"${number}"`;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
HTML5如何适配 iPhone IOS 底部黑条
Mar 09 HTML / CSS
css3学习之2D转换功能详解
Dec 23 HTML / CSS
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
Oct 10 HTML / CSS
纯CSS3实现鼠标悬停提示气泡效果
Feb 28 HTML / CSS
css3边框_动力节点Java学院整理
Jul 11 HTML / CSS
HTML5 语音搜索只需一句代码
Jan 03 HTML / CSS
HTML5的表单(绝对特别强大的功能)使用示例
Jun 20 HTML / CSS
html5 外链式实现加减乘除的代码
Sep 04 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
Nov 04 HTML / CSS
AmazeUI在模态框中嵌入表单形成模态输入框
Aug 20 HTML / CSS
小程序实现悬浮按钮的全过程记录
Oct 16 HTML / CSS
HTML 里 img 元素的 src 和 srcset 属性的区别详解
May 21 HTML / CSS
html2 canvas生成清晰的图片实现打印功能
Sep 23 #HTML / CSS
将SVG图引入到HTML页面的实现
Sep 20 #HTML / CSS
解析浏览器的一些“滚动”行为鉴赏
Sep 16 #HTML / CSS
html5移动端价格输入键盘的实现
Sep 16 #HTML / CSS
canvas生成带二维码海报的踩坑记录
Sep 11 #HTML / CSS
html5写一个BUI折叠菜单插件的实现方法
Sep 11 #HTML / CSS
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
Sep 09 #HTML / CSS
You might like
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
js 深拷贝函数
2008/12/04 Javascript
js 与或运算符 || &amp;&amp; 妙用
2009/12/09 Javascript
js下将字符串当函数执行的方法
2011/07/13 Javascript
仿中关村在线首页弹出式广告插件(jQuery版)
2012/05/03 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
2017/04/04 Javascript
JS实现颜色的10进制转化成rgba格式的方法
2017/09/04 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
puppeteer实现html截图的示例代码
2019/01/10 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
使用Python发送邮件附件以定时备份MySQL的教程
2015/04/25 Python
python的keyword模块用法实例分析
2015/06/30 Python
Python中的日期时间处理详解
2016/11/17 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
Python中is和==的区别详解
2018/11/15 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
python 判断文件还是文件夹的简单实例
2019/06/10 Python
Pytorch .pth权重文件的使用解析
2020/02/14 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
学校2014年度工作总结
2014/12/06 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
mysql联合索引的使用规则
2021/06/23 MySQL