参照网上的一个案例“参照的为绘制的是一个动态的圆环”,现在我的需求是改编成四分之三的圆环
实现效果:
样式展示 canvas绘图基本操作设置就可以
参考源代码链接:原文:https://www.jb51.net/html5/682215.html
> 引用的上文源代码进行修改,注意几点
1. 理解绘制圆环的原理,是根据弧度进行绘制
2. 弧度的计算公式
3. 每一角度转换成弧度
4. 起点和终点的坐标
> 自己画个图,方便理解!
首先根据图可以看到起点和重点,看坐标知道起点是-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动态绘制四分之三圆环图效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
vue动态绘制,vue,绘制圆环
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 群星《前途海量 电影原声专辑》[FLAC/分轨][227.78MB]
- 张信哲.1992-知道新曲与精丫巨石】【WAV+CUE】
- 王翠玲.1995-ANGEL【新艺宝】【WAV+CUE】
- 景冈山.1996-我的眼里只有你【大地唱片】【WAV+CUE】
- 群星《八戒 电影原声带》[320K/MP3][188.97MB]
- 群星《我的阿勒泰 影视原声带》[320K/MP3][139.47MB]
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[320K/MP3][148.91MB]
- 刘雅丽.2001-丽花皇后·EMI精选王【EMI百代】【FLAC分轨】
- 齐秦.1994-黄金十年1981-1990CHINA.TOUR.LIVE精丫上华】【WAV+CUE】
- 群星.2008-本色·百代音乐人创作专辑【EMI百代】【WAV+CUE】
- 群星.2001-同步过冬AVCD【环球】【WAV+CUE】
- 群星.2020-同步过冬2020冀待晴空【环球】【WAV+CUE】
- 沈雁.1986-四季(2012梦田复刻版)【白云唱片】【WAV+CUE】
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[FLAC/分轨][257.88MB]
- 《国语老歌 怀旧篇 3CD》[WAV/分轨][1.6GB]