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 相关文章推荐
用CSS禁用输入法(CSS3 UI规范)实例解析
Dec 04 HTML / CSS
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
Jan 07 HTML / CSS
css3 实现圆形旋转倒计时
Feb 24 HTML / CSS
纯HTML5+CSS3制作生日蛋糕代码
Nov 16 HTML / CSS
你可能不熟练的十个前端HTML5经典面试题
Jul 03 HTML / CSS
HTML5中的新元素介绍
Oct 17 HTML / CSS
HTML5 Canvas像素处理使用接口介绍
Dec 02 HTML / CSS
html5构建触屏网站之touch事件介绍
Jan 07 HTML / CSS
html5指南-4.使用Geolocation实现定位功能
Jan 07 HTML / CSS
浅谈html5 响应式布局
Dec 24 HTML / CSS
基于HTML5的齿轮动画特效
Feb 29 HTML / CSS
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
Apr 22 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+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
百度留言本js 大家可以参考下
2009/10/13 Javascript
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
jQuery事件详解
2017/02/23 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
vue+element模态框中新增模态框和删除功能
2019/06/11 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
python 获取本机ip地址的两个方法
2013/02/25 Python
Python中规范定义命名空间的一些建议
2016/06/04 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
Python闭包函数定义与用法分析
2018/07/20 Python
python for 循环获取index索引的方法
2019/02/01 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
法国春天百货官网:Printemps.com
2020/06/29 全球购物
运动会口号16字
2014/06/07 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
2015年组织部工作总结
2015/04/03 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL