详解利用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中利用animation属性创建雪花飘落特效
May 14 HTML / CSS
CSS3中的clip-path使用攻略
Aug 03 HTML / CSS
利用css3画个同心圆示例代码
Jul 03 HTML / CSS
CSS3 @keyframes简单动画实现
Feb 24 HTML / CSS
css3实现小箭头各种图形效果
Jul 08 HTML / CSS
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
Dec 22 HTML / CSS
HTML5实现QQ聊天气泡效果
Jun 26 HTML / CSS
HTML5的文档结构和新增标签完全解析
Apr 21 HTML / CSS
HTML5实现动画效果的方式汇总
Feb 29 HTML / CSS
HTML5 播放 RTSP 视频的实例代码
Jul 29 HTML / CSS
详解CSS玩转图片Base64编码
May 25 HTML / CSS
flex布局中使用flex-wrap实现换行的项目实践
Jun 21 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
yii2 commands模式以及配置crontab定时任务的方法
2017/08/19 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
java解析json方法总结
2019/05/16 PHP
js自带函数备忘 数组
2006/12/29 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
详解JS模块导入导出
2017/12/20 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
js实现简单页面全屏
2019/09/17 Javascript
vue实现倒计时获取验证码效果
2020/04/17 Javascript
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
[00:32]DOTA2上海特级锦标赛 Ehome战队宣传片
2016/03/03 DOTA
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
Pyinstaller将py打包成exe的实例
2018/03/31 Python
Python3几个常见问题的处理方法
2019/02/26 Python
python实现顺时针打印矩阵
2019/03/02 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
Pythonic版二分查找实现过程原理解析
2020/08/11 Python
jupyter notebook更换皮肤主题的实现
2021/01/07 Python
迪奥官网:Dior.com
2018/12/04 全球购物
采用怎样的方法保证数据的完整性
2013/12/02 面试题
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
我爱读书演讲稿
2014/05/07 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
Python办公自动化解决world文件批量转换
2021/09/15 Python