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 相关文章推荐
CSS3+DIV实现漂亮的动画彩色标签
Jun 16 HTML / CSS
使用css3和jquery实现可伸缩搜索框
Feb 12 HTML / CSS
详解CSS3选择器:nth-child和:nth-of-type之间的差异
Sep 18 HTML / CSS
使用CSS3实现input多选框自定义样式的方法示例
Jul 19 HTML / CSS
html5使用canvas绘制太阳系效果
Dec 15 HTML / CSS
canvas需要在标签里直接定义宽高
Dec 17 HTML / CSS
HTML5 canvas基本绘图之文字渲染
Jun 27 HTML / CSS
HTML5新特性 多线程(Worker SharedWorker)
Apr 24 HTML / CSS
详解html2canvas截图不能截取圆角图片的解决方案
Jan 30 HTML / CSS
canvas实现扭蛋机动画效果的示例代码
Oct 17 HTML / CSS
CSS 还能这样玩?奇思妙想渐变的艺术
Apr 27 HTML / CSS
纯CSS实现一个简单步骤条的示例代码
Jul 15 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
实用函数7
2007/11/08 PHP
php 求质素(素数) 的实现代码
2011/04/12 PHP
YII中assets的使用示例
2014/07/31 PHP
浅析php单例模式
2014/11/25 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
JavaScript的目的分析
2007/01/05 Javascript
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
JavaScript SweetAlert插件实现超酷消息警告框
2016/01/28 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
JS实现浏览器打印、打印预览示例
2017/02/28 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
2017/05/03 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
浅谈 Vue 项目优化的方法
2017/12/16 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
你或许不知道的一些npm实用技巧
2019/07/04 Javascript
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
python如何创建TCP服务端和客户端
2018/08/26 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
Python实现爬取并分析电商评论
2020/06/19 Python
Python之字典对象的几种创建方法
2020/09/30 Python
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
Prototype如何更新局部页面
2013/03/03 面试题
Ruby如何进行文件操作
2014/07/17 面试题
玲玲的画教学反思
2014/02/04 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
总结一些Java常用的加密算法
2021/06/11 Java/Android