详解利用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控制HTML元素动画效果
Feb 08 HTML / CSS
非常漂亮的CSS3百叶窗焦点图动画
Feb 24 HTML / CSS
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
Mar 02 HTML / CSS
html5 canvas绘制放射性渐变色效果
Jan 04 HTML / CSS
使用HTML5技术开发一个属于自己的超酷颜色选择器
Sep 22 HTML / CSS
使用html5 canvas 画时钟代码实例分享
Nov 11 HTML / CSS
html5简单示例_动力节点Java学院整理
Jul 07 HTML / CSS
Canvas与图片压缩的示例代码
Nov 28 HTML / CSS
canvas压缩图片以及卡片制作的方法示例
Dec 04 HTML / CSS
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
Apr 22 HTML / CSS
六种css3实现的边框过渡效果
Apr 22 HTML / CSS
使用canvas仿Echarts实现金字塔图的实例代码
Nov 11 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冒泡排序与快速排序实例详解
2015/12/07 PHP
Yii CGridView用法实例详解
2016/07/12 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
浅谈php调用python文件
2019/03/29 PHP
javascript 去字符串空格终极版(支持utf8)
2009/11/14 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
JS中表单的使用小结
2014/01/11 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
JS日期格式化之javascript Date format
2015/10/01 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
Bootstrap每天必学之警告框插件
2016/04/26 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
微信小程序 label 组件详解及简单实例
2017/01/10 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
JS设计模式之策略模式概念与用法分析
2018/02/05 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
Python中decorator使用实例
2015/04/14 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
python解决OpenCV在读取显示图片的时候闪退的问题
2021/02/23 Python
幼儿教师培训感言
2014/03/08 职场文书
与美同行演讲稿
2014/09/13 职场文书
教师拔河比赛广播稿
2014/10/14 职场文书
python学习之panda数据分析核心支持库
2021/05/07 Python
详解Python类和对象内容
2021/06/22 Python
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python
Python 实现Mac 屏幕截图详解
2021/10/05 Python
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL