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 相关文章推荐
在vs2010中调试javascript代码方法
Feb 11 Javascript
jQuery图片播放8款精美插件分享
Feb 17 Javascript
解析jquery中的ajax缓存问题
Dec 19 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
Aug 10 Javascript
关闭页面window.location事件未执行的原因及解决方法
Sep 01 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
Aug 05 Javascript
AngularJS中过滤器的使用与自定义实例代码
Sep 17 Javascript
用原生js做单页应用
Jan 17 Javascript
vue如何实现observer和watcher源码解析
Mar 09 Javascript
Mongoose中document与object的区别示例详解
Sep 18 Javascript
Vue 全局loading组件实例详解
May 29 Javascript
vue实现百度语音合成的实例讲解
Oct 14 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
JAVA/JSP学习系列之四
2006/10/09 PHP
两个开源的Php输出Excel文件类
2010/02/08 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
javascript jQuery插件练习
2008/12/24 Javascript
jQuery 源码分析笔记(4) Ready函数
2011/06/02 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
js触发asp.net的Button的Onclick事件应用
2013/02/02 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
2014/04/23 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
js实现交换运动效果的方法
2015/04/10 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
关于element-ui的隐藏组件el-scrollbar的使用
2019/05/29 Javascript
Vue实现省市区三级联动
2020/12/27 Vue.js
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
浅谈Django的缓存机制
2018/08/23 Python
Python求离散序列导数的示例
2019/07/10 Python
python Pexpect模块的使用
2020/12/25 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
一年级学生期末评语
2014/04/21 职场文书
体育课外活动总结
2014/07/08 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
文明上网主题班会
2015/08/14 职场文书
node.js使用express-fileupload中间件实现文件上传
2021/07/16 Javascript
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang