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 图片缩放效果代码
Jun 09 Javascript
return false,对阻止事件默认动作的一些测试代码
Nov 17 Javascript
jquery 查找select ,并触发事件的实现代码
Mar 30 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
Apr 15 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
Apr 26 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
Oct 30 Javascript
浅述Javascript的外部对象
Dec 07 Javascript
微信小程序引用公共js里的方法的实例详解
Aug 17 Javascript
防止页面url缓存中ajax中post请求的处理方法
Oct 10 Javascript
JS实现的base64加密解密操作示例
Apr 18 Javascript
JS实现图片拖拽交换效果
Nov 30 Javascript
vue中的过滤器实例代码详解
Jun 06 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
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
php实现cookie加密的方法
2015/03/10 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
laravel中短信发送验证码的实现方法
2018/04/25 PHP
Thinkphp 5.0实现微信企业付款到零钱
2018/09/30 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
基于javascript制作经典传统的拼图游戏
2016/03/22 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
2018/08/28 jQuery
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
python虚拟环境的安装配置图文教程
2017/10/20 Python
python中协程实现TCP连接的实例分析
2018/10/14 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
公证书标准格式
2014/04/10 职场文书
党支部创先争优活动总结
2014/08/28 职场文书
初中学生操行评语
2014/12/26 职场文书
英语感谢信范文
2015/01/20 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
关于vue中如何监听数组变化
2021/04/28 Vue.js
golang 在windows中设置环境变量的操作
2021/04/29 Golang
如何使用PyCharm及常用配置详解
2021/06/03 Python