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 相关文章推荐
网页中的图片的处理方法与代码
Nov 26 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
Apr 26 Javascript
javascript中2个感叹号的用法实例详解
Sep 04 Javascript
javaScript+turn.js实现图书翻页效果实例代码
Feb 16 Javascript
javascript基本常用排序算法解析
Sep 27 Javascript
在nginx上部署vue项目(history模式)的方法
Dec 28 Javascript
Angular如何在应用初始化时运行代码详解
Jun 11 Javascript
layui radio性别单选框赋值方法
Aug 15 Javascript
JavaScript RegExp 对象用法详解
Sep 24 Javascript
解决vue-cli 打包后自定义动画未执行的问题
Nov 12 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
Nov 12 Javascript
浅谈vue权限管理实现及流程
Apr 23 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/08/31 PHP
php入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
学习ExtJS accordion布局
2009/10/08 Javascript
javascript Keycode对照表
2009/10/24 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
JS实现微信里判断页面是否被分享成功的方法
2017/06/06 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
[02:06]2018完美世界全国高校联赛秋季赛开始报名(附彩蛋)
2018/09/03 DOTA
python中实现字符串翻转的方法
2018/07/11 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
python如何调用java类
2020/07/05 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
公务员年总结的自我评价
2013/10/25 职场文书
办公室驾驶员岗位职责
2013/11/15 职场文书
服装厂厂长职责
2013/12/16 职场文书
千元咖啡店的创业计划书范文
2013/12/29 职场文书
珍珠奶茶店创业计划书
2014/01/11 职场文书
高职教师先进事迹材料
2014/08/24 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
2015年副班长工作总结
2015/05/15 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
导游词之河北野三坡
2019/12/11 职场文书