详解利用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实现自定义滚动条代码分享
Aug 18 HTML / CSS
CSS3实现多重边框的方法总结
May 31 HTML / CSS
详解CSS3中常用的样式【基本文本和字体样式】
Oct 20 HTML / CSS
鲜为人知的HTML5语音合成功能
May 17 HTML / CSS
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
Jan 30 HTML / CSS
深入解析HTML5的IndexedDB索引数据库
Sep 14 HTML / CSS
a标签下载链接的简单实现
Sep 13 HTML / CSS
使用Html5实现异步上传文件,支持跨域,带有上传进度条
Sep 17 HTML / CSS
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
Oct 23 HTML / CSS
HTML+CSS实现导航条下拉菜单的示例代码
Aug 02 HTML / CSS
html5+实现plus.io进行拍照和图片等获取
Jun 01 HTML / CSS
如何用H5实现好玩的2048小游戏
Jul 23 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新手上路(十三)
2006/10/09 PHP
php中实现记住密码下次自动登录的例子
2014/11/06 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
vue二级路由设置方法
2018/02/09 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
分享Python开发中要注意的十个小贴士
2016/08/30 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
python 基于opencv去除图片阴影
2021/01/26 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
全球立体声:World Wide Stereo
2018/09/29 全球购物
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
趣天网日本站:Qoo10 JP
2019/09/18 全球购物
机电一体化专业应届生求职信
2013/11/27 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS
keepalived + nginx 实现高可用方案
2022/12/24 Servers