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静态的动态
Sep 18 Javascript
(function($){...})(jQuery)的意思
Jul 22 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
Jul 31 Javascript
解决json日期格式问题的3种方法
Feb 02 Javascript
Javascript闭包(Closure)详解
May 05 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
Jun 13 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
Nov 30 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
Jan 12 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
May 18 Javascript
Node.js API详解之 tty功能与用法实例分析
Apr 27 Javascript
Vue+Spring Boot简单用户登录(附Demo)
Nov 12 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
Nov 12 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中用文本文件做数据库的实现方法
2008/03/27 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
2014/08/25 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
使用vs code编辑调试php配置的方法
2019/01/29 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
JS获取后台Cookies值的小例子
2013/03/04 Javascript
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
JavaScript操作Cookie方法实例分析
2015/05/27 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
JS 插件dropload下拉刷新、上拉加载使用小结
2017/04/13 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
在Python的循环体中使用else语句的方法
2015/03/30 Python
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
python面向对象 反射原理解析
2019/08/12 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
浅谈django 重载str 方法
2020/05/19 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
小学岗位竞聘方案
2014/01/22 职场文书
趣味体育活动方案
2014/02/08 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
放飞梦想演讲稿
2014/05/05 职场文书
学校春季防火方案
2014/06/08 职场文书
大学生工作求职信
2014/06/23 职场文书
小学四年级学生评语
2014/12/26 职场文书
大学运动会通讯稿
2015/07/18 职场文书