小程序圓形進(jìn)度條及面積圖實(shí)現(xiàn)的方法
前言
以下兩個(gè)圖可以用來展示完成進(jìn)度或者進(jìn)度詳情,圖1用的是css來繪制進(jìn)度條,圖2用canvas來繪制面積圖。
效果預(yù)覽

圓形進(jìn)度條
傳進(jìn)去的有三個(gè)參數(shù)
| 字段 | 意思 |
|---|---|
| currentVal | 當(dāng)前值 |
| maxVal | 最大值 |
| status | 1 上漲 | 2 下跌 |
<circle
:maxVal="maxVal"
:currentVal="currentVal"
:status="2"
/>重點(diǎn)就是左右各畫一半然后利用transform: rotate()旋轉(zhuǎn)隱藏起來,接著利用傳進(jìn)來的當(dāng)前值計(jì)算進(jìn)度并進(jìn)行旋轉(zhuǎn)展示。
左右各一半如下圖:

setCircle() {
const { currentVal, maxVal } = this;
// NO1
if (currentVal > maxVal / 2) {
this.leftRotate = this.formatDegree(maxVal / 2);
this.rightRotate = this.formatDegree(currentVal - maxVal / 2);
} else {
// NO2
this.leftRotate = this.formatDegree(currentVal);
}
this.pointRotate = this.formatDegree(currentVal);
},
// NO3 計(jì)算旋轉(zhuǎn)
formatDegree(percent) {
return -136 + (360 / this.maxVal * percent);
}說明:
NO1: 如果當(dāng)前值大于最大值的50%則證明左右兩邊都需要計(jì)算展示進(jìn)度
NO2: 走到這里則證明當(dāng)前值小于最大值的一半只需要展示左邊進(jìn)度
NO3: 一個(gè)圈360度 / 最大值 * 多少份
關(guān)于圓點(diǎn)跟隨我這里的做法是設(shè)置一個(gè)一模一樣大小的盒子定位上去,并設(shè)置成圓形這樣就會(huì)和進(jìn)度條重合,然后根據(jù)當(dāng)前值旋轉(zhuǎn)就能準(zhǔn)確跟隨在進(jìn)度條的末端。
面積圖
| 字段 | 意思 |
|---|---|
| currentVal | 當(dāng)前值 |
| maxVal | 最大值 |
| sourceData | 數(shù)值分布情況 |
<combat
:maxVal="maxVal"
:currentVal="currentVal"
:sourceData="sourceData"
/>我這里的做法是先做個(gè)四邊形然后進(jìn)行旋轉(zhuǎn)變成一個(gè)棱形在根據(jù)傳入的數(shù)據(jù)進(jìn)行繪制。
// 設(shè)置圖表信息
async setUppixelRatio() {
const pixelRatio = await this.getSystemInfo();
const { canvas: res, ctx } = this;
let canvas = res.node;
// 放大canvas 解決模糊問題
canvas.width = res.width * pixelRatio;
canvas.height = res.height * pixelRatio;
this.originX = canvas.width / 2;
this.originY = canvas.height / 2;
this.startAngle = Math.PI + Math.PI / this.sourceData.length;
// 最大值分為若干等分
this.combatMaxVal = this.maxVal / this.sourceData.length;
this.fitAngle();
// 縮小canvas
ctx.scale(pixelRatio, pixelRatio);
},在手機(jī)上中canvas會(huì)變模糊,在這里我們先將canvas放大然后縮小就可以解決模糊的問題了。其他的都是一些畫線操作。
最后
源碼在這demo以上的兩個(gè)demo是用uni-app開發(fā)的,如果需要運(yùn)啟動(dòng)得用HBuilder運(yùn)行。
到此這篇關(guān)于小程序圓形進(jìn)度條及面積圖實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)小程序圓形進(jìn)度條內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用JS對iframe父子(內(nèi)外)頁面進(jìn)行操作的方法教程
這篇文章主要給大家介紹了利用JS對iframe父子(內(nèi)外)頁面進(jìn)行操作的方法教程,其中包括了怎么對iframe進(jìn)行操作、在iframe里面控制iframe外面的js代碼以及在父框架對子iframe進(jìn)行操作等,需要的朋友可以參考借鑒。2017-06-06
JS 文字符串轉(zhuǎn)換unicode編碼函數(shù)
AJAX傳遞中文字符串時(shí)必須把中文字符串編碼成unicode,一般會(huì)用到JS的自帶函數(shù)escape().不過找到了更好的函數(shù)來確決中文字符轉(zhuǎn)換成unicode編碼的函數(shù)2009-05-05
JavaScript使用indexOf()實(shí)現(xiàn)數(shù)組去重的方法分析
這篇文章主要介紹了JavaScript使用indexOf()實(shí)現(xiàn)數(shù)組去重的方法,結(jié)合實(shí)例形式分析了使用indexOf()方法進(jìn)行數(shù)組的判斷與去重相關(guān)原理與具體操作技巧,需要的朋友可以參考下2018-09-09
微信小程序?qū)崿F(xiàn)圓形進(jìn)度條動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)圓形進(jìn)度條動(dòng)畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
ligerUI---ListBox(列表框可移動(dòng)的實(shí)例)
下面小編就為大家分享一篇ligerUI---ListBox(列表框可移動(dòng)的實(shí)例),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11
Javascript前端UI框架Kit使用指南之kitjs事件管理
本文詳細(xì)介紹了Kitjs的事件管理功能,包括普通的Dom事件、Kit如何解決問題、代碼解析、注銷事件等。需要的朋友可以參考下。2014-11-11
JavaScript彈出新窗口并控制窗口移動(dòng)到指定位置的方法
這篇文章主要介紹了JavaScript彈出新窗口并控制窗口移動(dòng)到指定位置的方法,涉及javascript針對彈出窗口的操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
JS實(shí)現(xiàn)網(wǎng)頁滾動(dòng)條感應(yīng)鼠標(biāo)變色的方法
這篇文章主要介紹了JS實(shí)現(xiàn)網(wǎng)頁滾動(dòng)條感應(yīng)鼠標(biāo)變色的方法,實(shí)例分析了javascript針對鼠標(biāo)事件的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02

