详解利用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转换功能transform主要属性值分析及实现分享
May 06 HTML / CSS
css3制作彩色边线3d立体按钮的示例(css3按钮)
May 06 HTML / CSS
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
Jan 31 HTML / CSS
基于IE10/HTML5 开发
Apr 22 HTML / CSS
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
Sep 15 HTML / CSS
探讨HTML5移动开发的几大特性(必看)
Dec 30 HTML / CSS
使用HTML5在网页中嵌入音频和视频播放的基本方法
Feb 22 HTML / CSS
实例讲解利用HTML5 Canvas API操作图形旋转的方法
Mar 22 HTML / CSS
HTML5拖拽功能实现的拼图游戏
Jul 31 HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
May 13 HTML / CSS
Web前端:CSS最强总结 附详细代码
Mar 31 HTML / CSS
CSS基础详解
Oct 16 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
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
dedecms中常见问题修改方法总结
2007/03/21 PHP
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
PHP的cURL库简介及使用示例
2015/02/06 PHP
php中动态变量用法实例
2015/06/10 PHP
php编程每天必学之表单验证
2016/03/01 PHP
常用PHP封装分页工具类
2017/01/14 PHP
Nginx实现反向代理
2017/09/20 Servers
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
JavaScript常用工具方法封装
2019/02/12 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
浅谈Python中函数的参数传递
2016/06/21 Python
Python实现的简单dns查询功能示例
2017/05/24 Python
python 中的divmod数字处理函数浅析
2017/10/17 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
Python爬取网页信息的示例
2020/09/24 Python
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
素质拓展感言
2014/01/29 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
公司股份合作协议书
2014/12/07 职场文书
高三英语复习计划
2015/01/19 职场文书
介绍信模板
2015/01/31 职场文书