详解利用canvas实现环形进度条的方法


Posted in HTML / CSS onJune 12, 2019

前提:有时候在项目中会有用到进度条的情况,使用css3也可以实现,但是对于性能不好的设备,或者网络不好的情况下,卡顿现象非常明显,避免出现不流畅的尴尬情况,所以记录一下,使用canvas来实现的方法。

效果图

详解利用canvas实现环形进度条的方法

DOM中,首先定义canvas画板元素:

<canvas id="canvas" width="500" height="500" style="background:#F7F7F7;">
    <p>you browser not support canvas!</p>
  </canvas>

对于不支持canvas的浏览器则会显示:you browser not support canvas!

接下来是js编写:

定义canvas.js并在页面引入

var canvas = document.getElementById('canvas'), //获取canvas元素
  context = canvas.getContext('2d'), //获取画图环境,指明为2d
  centerX = canvas.width / 2, //Canvas中心点x轴坐标
  centerY = canvas.height / 2, //Canvas中心点y轴坐标
  rad = Math.PI * 2 / 100, //将360度分成100份,那么每一份就是rad度
  speed = 0.1; //加载的快慢就靠它了

//绘制蓝色外圈
function blueCircle(n) {
  context.save();
  context.beginPath();
  context.strokeStyle = "#49f";
  context.lineWidth = 12;
  context.arc(centerX, centerY, 100, -Math.PI / 2, -Math.PI / 2 + n * rad, false);
  context.stroke();
  context.restore();
}

//绘制白色外圈
function whiteCircle() {
  context.save();
  context.beginPath();
  context.strokeStyle = "#A5DEF1";
  context.lineWidth = 12;
  context.arc(centerX, centerY, 100, 0, Math.PI * 2, false);
  context.stroke();
  context.closePath();
  context.restore();
}

//百分比文字绘制
function text(n) {
  context.save();
  context.fillStyle = "#F47C7C";
  context.font = "40px Arial";
  context.textAlign = "center";
  context.textBaseline = "middle";
  context.fillText(n.toFixed(0) + "%", centerX, centerY);
  context.restore();
}

//动画循环
(function drawFrame() {
  window.requestAnimationFrame(drawFrame, canvas);
  context.clearRect(0, 0, canvas.width, canvas.height);

  whiteCircle();
  text(speed);
  blueCircle(speed);

  if (speed > 100) speed = 0;
  speed += 0.1;
}());
window.requestAnimationFrame(drawFrame, canvas);

每行代码的注释标注非常清楚,如果还有不理解的可以去看canvas基础,应该就可以了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS3伪类选择器:nth-child()
Apr 02 HTML / CSS
CSS3制作气泡对话框的实例教程
May 10 HTML / CSS
CSS3关于z-index不生效问题的解决
Feb 19 HTML / CSS
CSS3动画和HTML5新特性详解
Aug 31 HTML / CSS
详解css3 flex弹性盒自动铺满写法
Sep 17 HTML / CSS
利用html5 file api读取本地文件示例(如图片、PDF等)
Mar 07 HTML / CSS
基于 HTML5 Canvas实现 的交互式地铁线路图
Mar 05 HTML / CSS
HTML5中5个简单实用的API
Apr 28 HTML / CSS
HTML5学习笔记之html5与传统html区别
Jan 06 HTML / CSS
Web时代变迁及html5与html4的区别
Jan 06 HTML / CSS
html5简单示例_动力节点Java学院整理
Jul 07 HTML / CSS
使用Html5中的cavas画一面国旗
Sep 25 HTML / CSS
Html5 实现微信分享及自定义内容的流程
Aug 20 #HTML / CSS
前端canvas动画如何转成mp4视频的方法
Jun 17 #HTML / CSS
详解FireFox下Canvas使用图像合成绘制SVG的Bug
Jul 10 #HTML / CSS
canvas实现有递增动画的环形进度条的实现方法
Jul 10 #HTML / CSS
Html5新增标签与样式及让元素水平垂直居中
Jul 11 #HTML / CSS
解决H5的a标签的download属性下载service上的文件出现跨域问题
Jul 16 #HTML / CSS
html通过canvas转成base64的方法
Jul 18 #HTML / CSS
You might like
PHP session有效期session.gc_maxlifetime
2011/04/20 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
PHP数组访问常用方法解析
2020/09/05 PHP
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
2015/06/05 Javascript
javascript 闭包详解
2015/07/02 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
2016/11/12 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
python对html代码进行escape编码的方法
2015/05/04 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
python多环境切换及pyenv使用过程详解
2019/09/27 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
爱普生美国官网:Epson美国
2018/11/05 全球购物
Myprotein中国网站:欧洲畅销运动营养品牌
2021/02/11 全球购物
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
感恩节活动策划方案
2014/05/16 职场文书
园林专业毕业生自荐信
2014/07/04 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
2016公司年会主持词
2015/07/01 职场文书
毕业酒会致辞
2015/07/29 职场文书
校园运动会广播稿
2015/08/19 职场文书
MySQL锁机制
2021/04/05 MySQL