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 相关文章推荐
IE滤镜与CSS3效果(详细整理分享)
Jan 25 HTML / CSS
CSS3实现鼠标悬停显示扩展内容
Aug 24 HTML / CSS
利用 CSS3 实现的无缝轮播功能代码
Sep 25 HTML / CSS
HTML5之语义标签介绍
Jul 07 HTML / CSS
HTML5 移动页面自适应手机屏幕四类方法总结
Aug 17 HTML / CSS
html5 canvas实现给图片添加平铺水印
Aug 20 HTML / CSS
HTML5 body设置自适应全屏
May 07 HTML / CSS
Canvas波浪花环的示例代码
Aug 21 HTML / CSS
canvas 绘图时位置偏离的问题解决
Sep 16 HTML / CSS
CSS极坐标的实例代码
Jun 03 HTML / CSS
html输入两个数实现加减乘除功能
Jul 01 HTML / CSS
CSS Transition通过改变Height实现展开收起元素
Aug 07 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
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
Python操作串口的方法
2015/06/17 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
python 搜索大文件的实例代码
2019/07/08 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
什么是Python中的匿名函数
2020/06/02 Python
如何对python的字典进行排序
2020/06/19 Python
Python如何读取、写入CSV数据
2020/07/28 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
绩效专员岗位职责
2013/12/02 职场文书
综合办公室主任职责
2013/12/16 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
党的群众路线教育实践活动督导组工作情况汇报
2014/10/28 职场文书
毕业生自荐信范文
2015/03/05 职场文书
大学生青年志愿者活动总结
2015/05/06 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
2015年圣诞节寄语
2015/08/17 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
Redis命令处理过程源码解析
2022/02/12 Redis