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制作响应式导航菜单的方法
Jul 12 HTML / CSS
CSS3实现多背景模拟动态边框的效果
Nov 08 HTML / CSS
css3如何绘制一个圆圆的loading转圈动画
Jan 09 HTML / CSS
HTML5 与 XHTML2
Oct 17 HTML / CSS
关于 HTML5 的七个传说小结
Apr 12 HTML / CSS
html5+css3进度条倒计时动画特效代码【推荐】
Mar 08 HTML / CSS
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
Dec 16 HTML / CSS
HTML5无刷新改变当前url的代码
Mar 15 HTML / CSS
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
Apr 08 HTML / CSS
详解如何使用rem或viewport进行移动端适配
Aug 14 HTML / CSS
amazeui 验证按钮扩展的实现
Aug 21 HTML / CSS
HTML5之高度塌陷问题的解决
Jun 01 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 字符串函数收集
2010/03/29 PHP
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
php实现文件下载实例分享
2014/06/02 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
php array_keys 返回数组的键名
2016/10/25 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
基于jQuery实现动态数字展示效果
2015/08/12 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
vue项目引入ts步骤(小结)
2019/10/31 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
Python批量查询域名是否被注册过
2017/06/21 Python
如何使用python传入不确定个数参数
2020/02/18 Python
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
面料业务员岗位职责
2013/12/26 职场文书
婚礼新郎父母答谢词
2014/01/16 职场文书
关于期中考试的反思
2014/02/02 职场文书
消防战士优秀事迹材料
2014/02/13 职场文书
教师廉洁自律承诺书
2014/05/26 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang
python 中[0]*2与0*2的区别说明
2021/05/10 Python
html+css实现文字折叠特效实例
2021/06/02 HTML / CSS
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python