vue動(dòng)態(tài)繪制四分之三圓環(huán)圖效果
參照網(wǎng)上的一個(gè)案例“參照的為繪制的是一個(gè)動(dòng)態(tài)的圓環(huán)”,現(xiàn)在我的需求是改編成四分之三的圓環(huán)
實(shí)現(xiàn)效果:

樣式展示 canvas繪圖基本操作設(shè)置就可以
參考源代碼鏈接:原文:http://www.fzitv.net/html5/682215.html
> 引用的上文源代碼進(jìn)行修改,注意幾點(diǎn)
1. 理解繪制圓環(huán)的原理,是根據(jù)弧度進(jìn)行繪制
2. 弧度的計(jì)算公式
3. 每一角度轉(zhuǎn)換成弧度
4. 起點(diǎn)和終點(diǎn)的坐標(biāo)
> 自己畫個(gè)圖,方便理解!

首先根據(jù)圖可以看到起點(diǎn)和重點(diǎn),看坐標(biāo)知道起點(diǎn)是-240度,這個(gè)正負(fù)還是要區(qū)分的,每一弧度的計(jì)算公式
將角度轉(zhuǎn)換為弧度:
var radians = degrees * (Math.PI/180);
這樣就可以進(jìn)行改版了
改版之后的代碼
`drawMain(drawing_elem, percent, forecolor, bgcolor,fillColor) {
/*
@drawing_elem: 繪制對(duì)象
@percent:繪制圓環(huán)百分比, 范圍[0, 100]
@forecolor: 繪制圓環(huán)的前景色,顏色代碼
@bgcolor: 繪制圓環(huán)的背景色,顏色代碼
*/
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; //設(shè)置線寬
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);
**起點(diǎn),終點(diǎn),半徑,開始點(diǎn),結(jié)束點(diǎn),是否順/逆時(shí)針**
context.stroke();
context.closePath();
context.restore();
}
//繪制運(yùn)動(dòng)圓環(huán)
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坐標(biāo),y坐標(biāo),半徑,起始角度,終止角度,順時(shí)針/逆時(shí)針)
context.stroke();
context.closePath();
context.restore();
}
//繪制文字
function text(n){
context.save(); //save和restore可以保證樣式屬性只運(yùn)用于該段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();
}
//執(zhí)行動(dòng)畫
(function drawFrame(){
// 去掉動(dòng)畫加載效果
// window.requestAnimationFrame(drawFrame);
// context.clearRect(0, 0, drawing_elem.width, drawing_elem.height);
backgroundCircle();
text(percent);
foregroundCircle(percent);
**// 去掉動(dòng)畫加載效果,這兩行代碼,由于網(wǎng)速加載慢的時(shí)候繪制的比較慢,動(dòng)態(tài)效果繪制的太緩慢,所以去掉了**
// if(speed >= percent) return;
// speed += 1;
}());
},
接下來(lái)就是調(diào)用該方法了,調(diào)用的時(shí)候放到了nextTick中,當(dāng)時(shí)遇到的問(wèn)題就是加載只能加載第一個(gè),下面的加載不出來(lái),自我感覺(jué)加載順序的問(wèn)題,繪制了但是沒(méi)渲染出來(lái)
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變量是我從接口取出來(lái)的數(shù)據(jù)存到了score變量中**
}
})
總結(jié)
以上所述是小編給大家介紹的vue動(dòng)態(tài)繪制四分之三圓環(huán)圖效果,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
- Vue實(shí)現(xiàn)動(dòng)態(tài)圓環(huán)百分比進(jìn)度條
- Springboot項(xiàng)目中運(yùn)用vue+ElementUI+echarts前后端交互實(shí)現(xiàn)動(dòng)態(tài)圓環(huán)圖(推薦)
- Springboot運(yùn)用vue+echarts前后端交互實(shí)現(xiàn)動(dòng)態(tài)圓環(huán)圖
- vue圓環(huán)百分比進(jìn)度條組件功能的實(shí)現(xiàn)
- Vue實(shí)現(xiàn)圓環(huán)進(jìn)度條的示例
- vue中使用echarts制作圓環(huán)圖的實(shí)例代碼
- vue使用canvas繪制圓環(huán)
相關(guān)文章
vue 解決provide和inject響應(yīng)的問(wèn)題
這篇文章主要介紹了vue 解決provide和inject響應(yīng)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
Monaco-editor 的 JSON Schema 配置及使用介紹
這篇文章主要為大家介紹了Monaco-editor 的 JSON Schema 配置及使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
解決vite build打包后頁(yè)面不能正常訪問(wèn)的情況
這篇文章主要介紹了解決Vite打包后直接使用瀏覽器打開,顯示空白問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Vue實(shí)現(xiàn)搜索 和新聞列表功能簡(jiǎn)單范例
本文通過(guò)實(shí)例代碼給大家介紹了Vue實(shí)現(xiàn)搜索 和新聞列表功能簡(jiǎn)單范例,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2018-03-03
vue實(shí)現(xiàn)通過(guò)手機(jī)號(hào)發(fā)送短信驗(yàn)證碼登錄的示例代碼
本文主要介紹了vue實(shí)現(xiàn)通過(guò)手機(jī)號(hào)發(fā)送短信驗(yàn)證碼登錄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05

