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设备类型-Media Queries图表简介及使用方法
Jan 21 HTML / CSS
纯CSS3实现圆角效果(含IE兼容解决方法)
May 07 HTML / CSS
CSS3使用border-radius属性制作圆角
Dec 22 HTML / CSS
CSS3弹性盒模型开发笔记(二)
Apr 26 HTML / CSS
html5 button autofocus 属性介绍及应用
Jan 04 HTML / CSS
html5 canvas实现圆形时钟代码分享
Dec 25 HTML / CSS
html5 视频播放解决方案
Nov 06 HTML / CSS
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
Dec 15 HTML / CSS
localStorage、sessionStorage使用总结
Nov 17 HTML / CSS
深入浅析HTML5中的article和section的区别
May 15 HTML / CSS
html5 postMessage前端跨域并前端监听的方法示例
Nov 01 HTML / CSS
Html5移动端网页端适配(js+rem)
Feb 03 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调用Twitter的RSS的实现代码
2010/03/10 PHP
nginx+php-fpm配置文件的组织结构介绍
2012/11/07 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
javascript调试说明
2010/06/07 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
jquery移动点击的项目到列表最顶端的方法
2015/06/24 Javascript
JavaScript实现同时调用多个函数的方法
2015/11/09 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
JavaScript定时器setTimeout()和setInterval()详解
2017/08/18 Javascript
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
Python文件和目录操作详解
2015/02/08 Python
Python实现批量下载图片的方法
2015/07/08 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
Europcar葡萄牙:葡萄牙汽车和货车租赁
2017/10/13 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
初中三好学生事迹材料
2014/01/13 职场文书
学生手册评语
2014/05/05 职场文书
团日活动总结模板
2014/06/25 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
单位工资证明范本
2015/06/12 职场文书