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 相关文章推荐
基于jquery跨浏览器显示的file上传控件
Oct 24 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
May 27 Javascript
jquery form表单序列化为对象的示例代码
Mar 05 Javascript
jquery实现倒计时功能
Dec 28 Javascript
jQuery根据表单name获取值的方法
May 24 Javascript
js实现右键自定义菜单
Dec 03 Javascript
Bootstrap笔记之缩略图、警告框实例详解
Mar 09 Javascript
详解用vue-cli来搭建vue项目和webpack
Apr 20 Javascript
浅谈如何使用webpack构建多页面应用
May 30 Javascript
原生JS实现自定义下拉单选选择框功能
Oct 12 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
Sep 25 Javascript
JS typeof fn === 'function' &amp;&amp; fn()详解
Aug 22 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实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
2018/10/11 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
[01:45]2014DOTA2 TI预选赛预选赛 大神专访第二弹!
2014/05/20 DOTA
Python可跨平台实现获取按键的方法
2015/03/05 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
python使用turtle绘制国际象棋棋盘
2019/05/23 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
python selenium操作cookie的实现
2020/03/18 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
《夕阳真美》教学反思
2014/04/27 职场文书
行政司机岗位职责
2015/04/10 职场文书
python删除csv文件的行列
2021/04/06 Python