vue动态绘制四分之三圆环图效果


Posted in Javascript onSeptember 03, 2019

参照网上的一个案例“参照的为绘制的是一个动态的圆环”,现在我的需求是改编成四分之三的圆环

实现效果:

vue动态绘制四分之三圆环图效果

样式展示 canvas绘图基本操作设置就可以

参考源代码链接:原文:https://3water.com/html5/682215.html

> 引用的上文源代码进行修改,注意几点

1. 理解绘制圆环的原理,是根据弧度进行绘制
2. 弧度的计算公式
3. 每一角度转换成弧度
4. 起点和终点的坐标

> 自己画个图,方便理解!

vue动态绘制四分之三圆环图效果

首先根据图可以看到起点和重点,看坐标知道起点是-240度,这个正负还是要区分的,每一弧度的计算公式

将角度转换为弧度:

var radians = degrees * (Math.PI/180);

这样就可以进行改版了

改版之后的代码

`drawMain(drawing_elem, percent, forecolor, bgcolor,fillColor) {
/*
@drawing_elem: 绘制对象
@percent:绘制圆环百分比, 范围[0, 100]
@forecolor: 绘制圆环的前景色,颜色代码
@bgcolor: 绘制圆环的背景色,颜色代码
*/
var context = drawing_elem.getContext('2d')
var center_x = drawing_elem.width / 2;
var center_y = drawing_elem.height / 2;
var rad = Math.PI/3*5/100; //绘制的为300度的圆
// 65 * Math.PI / 180, 115 * Math.PI / 180
// var speed = 0;

// 绘制背景圆圈
function backgroundCircle(){
context.save();
context.beginPath();
context.lineWidth = 8; //设置线宽
var radius = center_x - context.lineWidth;
context.lineCap = "round";
context.strokeStyle = bgcolor;
context.arc(center_x, center_y, radius,-Math.PI/180*240, Math.PI/180*60, false);
**起点,终点,半径,开始点,结束点,是否顺/逆时针**
context.stroke();
context.closePath();
context.restore();
}

//绘制运动圆环
function foregroundCircle(n){
context.save();
context.strokeStyle = forecolor;
context.lineWidth = 8;
context.lineCap = "round";
var radius = center_x - context.lineWidth;
// console.log(endAngle)
context.beginPath();
context.arc(center_x, center_y, radius ,-Math.PI/180*240 ,-Math.PI/180*240+n*rad , false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针)
context.stroke();
context.closePath();
context.restore();
}

//绘制文字
function text(n){
context.save(); //save和restore可以保证样式属性只运用于该段canvas元素
context.fillStyle = fillColor;
var font_size = 20;
context.font = font_size + "px Helvetica";
var text_width = context.measureText(n.toFixed(0)+"%").width;
context.fillText(n.toFixed(0)+"%", center_x-text_width/2, center_y + font_size/2);
context.restore();
}

//执行动画
(function drawFrame(){
// 去掉动画加载效果
// window.requestAnimationFrame(drawFrame);
// context.clearRect(0, 0, drawing_elem.width, drawing_elem.height);
backgroundCircle();
text(percent);
foregroundCircle(percent);
**// 去掉动画加载效果,这两行代码,由于网速加载慢的时候绘制的比较慢,动态效果绘制的太缓慢,所以去掉了**
// if(speed >= percent) return;
// speed += 1;
}());
},

 接下来就是调用该方法了,调用的时候放到了nextTick中,当时遇到的问题就是加载只能加载第一个,下面的加载不出来,自我感觉加载顺序的问题,绘制了但是没渲染出来

this.$nextTick(()=>{
for(var i =0;i<this.couponCenterLists.length;i++) {
this.childrenTag = document.getElementById("time-graph-canvas"+i);
let score = this.couponCenterLists[i].couponPercentage * 100;
this.drawMain(this.childrenTag, score, "#fff", "rgba(255,255,255,0.4)","#fff");
**score变量是我从接口取出来的数据存到了score变量中**
}
})

总结

以上所述是小编给大家介绍的vue动态绘制四分之三圆环图效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript cookie操作类的实现代码小结附使用方法
Jun 02 Javascript
js 事件处理函数间的Event物件是否全等
Apr 08 Javascript
js函数返回多个返回值的示例代码
Nov 05 Javascript
js 判断控件获得焦点的示例代码
Mar 04 Javascript
对js关键字命名的疑问介绍
Apr 25 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
Aug 17 Javascript
JS动态改变浏览器标题的方法
Apr 06 Javascript
JS 全屏和退出全屏详解及实例代码
Nov 07 Javascript
js原生方法被覆盖,从新赋值原生的方法
Jan 02 Javascript
vue-cli3 配置开发与测试环境详解
May 17 Javascript
Js利用正则表达式去除字符串的中括号
Nov 23 Javascript
JavaScript实现表单验证功能
Dec 09 Javascript
微信小程序拼接图片链接无底洞深入探究
Sep 03 #Javascript
layui radio单选限制下一个radio单选的实例
Sep 03 #Javascript
JavaScript Array对象基本方法详解
Sep 03 #Javascript
微信小程序通过一个json实现分享朋友圈图片
Sep 03 #Javascript
layui 实现自动选择radio单选框(checked)的方法
Sep 03 #Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
Sep 03 #Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
Sep 03 #Javascript
You might like
收集的php编写大型网站问题集
2007/03/06 PHP
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
php读取本地json文件的实例
2018/03/07 PHP
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
JQuery解析HTML、JSON和XML实例详解
2014/03/29 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
2015/12/17 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
AngularJS入门教程之MVC架构实例分析
2016/11/01 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
小程序显示弹窗时禁止下层的内容滚动实现方法
2019/03/20 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
Python遍历numpy数组的实例
2018/04/04 Python
python+opencv实现高斯平滑滤波
2020/07/21 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
Python文件夹批处理操作代码实例
2020/07/21 Python
瑜伽国际:Yoga International
2018/04/18 全球购物
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
中科方德软件测试面试题
2016/04/21 面试题
审计工作个人的自我评价
2013/12/25 职场文书
百日安全活动总结
2014/05/04 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
介绍信格式
2015/01/30 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
Nginx动静分离配置实现与说明
2022/04/07 Servers