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 相关文章推荐
出现“不能执行已释放的Script代码”错误的原因及解决办法
Aug 29 Javascript
js 实现的可折叠留言板(附源码下载)
Jul 01 Javascript
JavaScript数据结构和算法之二叉树详解
Feb 11 Javascript
javascript实现复选框超过限制即弹出警告框的方法
Feb 25 Javascript
浅析AngularJS中的指令
Mar 20 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
Jul 22 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
Sep 01 Javascript
Bootstrap和Java分页实例第二篇
Dec 23 Javascript
JS 在数组指定位置插入/删除数据的方法
Jan 12 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
May 08 Javascript
JS获取月的第几周和年的第几周实例代码
Dec 05 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
Apr 10 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之Smarty模板使用方法示例详解
2014/07/08 PHP
Zend Guard使用指南及问题处理
2015/01/07 PHP
PHP整合PayPal支付
2015/06/11 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
tornado捕获和处理404错误的方法
2014/02/26 Python
Python制作数据导入导出工具
2015/07/31 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
Python3 修改默认环境的方法
2019/02/16 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
医院实习接收函
2014/01/12 职场文书
员工工作表扬信范文
2014/01/13 职场文书
实习生自我评价
2014/01/18 职场文书
任命书格式
2014/06/05 职场文书
大学生求职信例文
2014/06/29 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
承诺保证书格式
2015/02/28 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
社区党务工作总结2015
2015/05/19 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers
Python时间操作之pytz模块使用详解
2022/06/14 Python
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技