详解利用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的@media属性实现页面响应式布局示例代码
Feb 10 HTML / CSS
CSS3 text-shadow实现文字阴影效果
Feb 24 HTML / CSS
利用CSS3的线性渐变linear-gradient制作边框的示例
Jun 02 HTML / CSS
HTML5 Canvas鼠标与键盘事件demo示例
Jul 04 HTML / CSS
HTML5注册表单的自动聚焦与占位文本示例代码
Jul 19 HTML / CSS
HTML5新增的Css选择器、伪类介绍
Aug 07 HTML / CSS
HTML5 canvas画图并保存成图片的jcanvas插件
Jan 17 HTML / CSS
【HTML5】Canvas绘制简单图片教程
May 13 HTML / CSS
html5使用canvas实现弹幕功能示例
Sep 11 HTML / CSS
简述Html5 IphoneX 适配方法
Feb 08 HTML / CSS
HTML5拖拽功能实现的拼图游戏
Jul 31 HTML / CSS
详解CSS3浏览器兼容
Dec 24 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
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
js调用css属性写法
2013/09/21 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
2014/06/10 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
详解JavaScript中的表单验证
2015/06/16 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
js实现图片淡入淡出切换简易效果
2016/08/22 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
python操作excel让工作自动化
2019/08/09 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
业务助理岗位职责
2013/11/18 职场文书
建筑工程专业学生的自我评价
2013/12/25 职场文书
大学生演讲稿范文
2014/01/11 职场文书
创意活动策划书
2014/01/15 职场文书
节能标语大全
2014/06/21 职场文书
农村门前三包责任书
2014/07/25 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书
PyTorch的Debug指南
2021/05/07 Python
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers