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 相关文章推荐
js Map List 遍历使用示例
Jul 10 Javascript
js获取当前月的第一天和最后一天的小例子
Nov 18 Javascript
jQuery实现只允许输入数字和小数点的方法
Mar 02 Javascript
简单实现JS计算器功能
Dec 21 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
Feb 20 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
Apr 20 Javascript
原生JS控制多个滚动条同步跟随滚动效果
Dec 22 Javascript
详解性能更优越的小程序图片懒加载方式
Jul 18 Javascript
Angular事件之不同组件间传递数据的方法
Nov 15 Javascript
利用Electron简单撸一个Markdown编辑器的方法
Jun 10 Javascript
js DOM的事件常见操作实例详解
Dec 16 Javascript
低门槛开发iOS、Android、小程序应用的前端框架详解
Oct 16 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
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
jQuery操作input值的各种方法总结
2013/11/21 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
vue中音频wavesurfer.js的使用方法
2020/02/20 Vue.js
微信小程序文章详情功能完整实例
2020/06/03 Javascript
django 按时间范围查询数据库实例代码
2018/02/11 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
Python实现SQL注入检测插件实例代码
2019/02/02 Python
Python 寻找局部最高点的实现
2019/12/05 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
Python self用法详解
2020/11/28 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
出国留学自荐信
2013/10/25 职场文书
机电职业生涯规划书范文
2014/03/08 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
2014年教师工作总结
2014/11/10 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书