详解利用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 相关文章推荐
纯HTML+CSS3制作导航菜单(附源码)
Apr 24 HTML / CSS
CSS3中设置3D变形的transform-style属性详解
May 23 HTML / CSS
CSS3田字格列表的样式编写方法
Nov 22 HTML / CSS
css3实现二维码扫描特效的示例
Oct 29 HTML / CSS
HTML5 新事件 小结
Jul 16 HTML / CSS
HTML5语音识别标签写法附图
Nov 18 HTML / CSS
HTML5 canvas基本绘图之图形组合
Jun 27 HTML / CSS
HTML5无刷新改变当前url的代码
Mar 15 HTML / CSS
HTML5 LocalStorage 本地存储详细概括(多图)
Aug 18 HTML / CSS
Html5页面二次分享的实现
Jul 30 HTML / CSS
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
Sep 19 HTML / CSS
AmazeUI 网格的实现示例
Aug 13 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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
基于PHP常用函数的用法详解
2013/05/10 PHP
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
jquery validate表单验证的基本用法入门
2016/01/18 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
详解微信小程序 template添加绑定事件
2017/06/23 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
Vue3.0的优化总结
2020/10/16 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
python制作一个桌面便签软件
2015/08/09 Python
快速入手Python字符编码
2016/08/03 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
Python笔记之facade模式
2019/11/20 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
个人查摆剖析材料
2014/02/04 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
新郎结婚感言
2015/07/31 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
浅谈Python 中的复数问题
2021/05/19 Python