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的appearance属性改变元素的外观的方法
Dec 12 HTML / CSS
CSS3绘制有活力的链接下划线
Jul 14 HTML / CSS
详解HTML5表单新增属性
Dec 21 HTML / CSS
HTML5的新特性(1)
Mar 03 HTML / CSS
HTML最新标准HTML5总结(必看)
Jun 13 HTML / CSS
html5将图片转换成base64的实例代码
Sep 21 HTML / CSS
app内嵌H5 webview 本地缓存问题的解决
Oct 19 HTML / CSS
HTML5拖拽文件上传的示例代码
Mar 04 HTML / CSS
html+css实现分层金字塔的实例
Jun 02 HTML / CSS
浅谈css实现背景颜色半透明的两种方法
Dec 06 HTML / CSS
CSS三大特性继承性、层叠性和优先级详解
Jan 18 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的五种设计模式
2012/09/05 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
Javascript 对象的解释
2008/11/24 Javascript
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
Vue.js 60分钟快速入门教程
2017/03/28 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
[00:47]DOTA2荣耀之路6:天火,天火!
2018/05/30 DOTA
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
python 常用日期处理-- datetime 模块的使用
2020/09/02 Python
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
宣传保护环境的公益广告词
2014/03/13 职场文书
汽车销售经理岗位职责
2014/06/09 职场文书
机械专业应届毕业生自荐书
2014/06/12 职场文书
农行心得体会
2014/09/02 职场文书
英文导游词
2015/02/13 职场文书
小学感恩主题班会
2015/08/12 职场文书
一篇文章带你掌握SQLite3基本用法
2022/06/14 数据库