微信小程序 繪圖之餅圖實(shí)現(xiàn)
微信小程序的推出,無疑將會(huì)在移動(dòng)互聯(lián)網(wǎng)行業(yè)里再次掀起風(fēng)浪。有人會(huì)質(zhì)疑小程序會(huì)不會(huì)火, 會(huì)不會(huì)火我不知道, 看微信的用戶量即可明白一切。這里就先學(xué)習(xí)下微信小程序繪圖的功能實(shí)現(xiàn)。

官方文檔:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-canvas.html
思路是先畫第一段弧,然后連線回圓心,關(guān)閉路徑,注意不需要連線到起始位,用fill()自動(dòng)閉合到起始點(diǎn),對照Photoshop里路徑轉(zhuǎn)選區(qū)的做法可以有助于理解;第二段弧以前一段弧為起始角度,再回圓心,最后關(guān)閉路徑;第三段弧以前兩段弧之和為起始角度,掃過相應(yīng)比重的弧度;以此類推,完成整圓。

布局文件
<canvas canvas-id="canvas2" style="width:200px;height:200px;border:1px solid #ccc;margin-top:100px;"></canvas>
Javascript文件
Page({
onReady:function(){
// 頁面渲染完成
// 創(chuàng)建上下文
var context = wx.createContext();
// 畫餅圖
// 數(shù)據(jù)源
var array = [20, 30, 40, 40];
var colors = ["#ff0000", "#ffff00", "#0000ff", "#00ff00"];
var total = 0;
// 計(jì)算問題
for (index = 0; index < array.length; index++) {
total += array[index];
}
// 定義圓心坐標(biāo)
var point = {x: 100, y: 100};
// 定義半徑大小
var radius = 60;
/* 循環(huán)遍歷所有的pie */
for (i = 0; i < array.length; i++) {
context.beginPath();
// 起點(diǎn)弧度
var start = 0;
if (i > 0) {
// 計(jì)算開始弧度是前幾項(xiàng)的總和,即從之前的基礎(chǔ)的上繼續(xù)作畫
for (j = 0; j < i; j++) {
start += array[j] / total * 2 * Math.PI;
}
}
console.log("i:" + i);
console.log("start:" + start);
// 1.先做第一個(gè)pie
// 2.畫一條弧,并填充成三角餅pie,前2個(gè)參數(shù)確定圓心,第3參數(shù)為半徑,第4參數(shù)起始旋轉(zhuǎn)弧度數(shù),第5參數(shù)本次掃過的弧度數(shù),第6個(gè)參數(shù)為時(shí)針方向-false為順時(shí)針
context.arc(point.x, point.y, radius, start, array[i] / total * 2 * Math.PI, false);
// 3.連線回圓心
context.lineTo(point.x, point.y);
// 4.填充樣式
context.setFillStyle(colors[i]);
// 5.填充動(dòng)作
context.fill();
context.closePath();
}
wx.drawCanvas({
canvasId: 'canvas2',
actions: context.getActions()
});
}
})
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- 微信小程序 二維碼canvas繪制實(shí)例詳解
- JS繪制微信小程序畫布時(shí)鐘
- 微信小程序 小程序制作及動(dòng)畫(animation樣式)詳解
- 微信小程序的動(dòng)畫效果詳解
- 微信小程序 連續(xù)旋轉(zhuǎn)動(dòng)畫(this.animation.rotate)詳解
- 微信小程序?qū)崿F(xiàn)登錄頁云層漂浮的動(dòng)畫效果
- 微信小程序開發(fā)之a(chǎn)nimation循環(huán)動(dòng)畫實(shí)現(xiàn)的讓云朵飄效果
- 微信小程序開發(fā)animation心跳動(dòng)畫效果
- 微信小程序開發(fā)之麥克風(fēng)動(dòng)畫 幀動(dòng)畫 放大 淡出
- 微信小程序 動(dòng)畫的簡單實(shí)例
- 微信小程序?qū)崿F(xiàn)的涂鴉功能示例【附源碼下載】
相關(guān)文章
JavaScript 中有了Object 為什么還需要 Map 呢
Map 是用于存儲(chǔ)鍵值的,而 JavaScript 中對象也是由鍵值對組成的,那么 Map 存在的意義是什么呢?下面文章小編就來向大家詳細(xì)介紹吧,需要的朋友可以參考下2021-09-09
微信公眾號(hào) 客服接口的開發(fā)實(shí)例詳解
這篇文章主要介紹了微信公眾號(hào) 客服接口的開發(fā)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2016-09-09
TypeScript對象解構(gòu)操作符在Spartacus實(shí)際項(xiàng)目開發(fā)中的應(yīng)用解析
這篇文章主要為大家介紹了TypeScript對象解構(gòu)操作符在Spartacus實(shí)際項(xiàng)目開發(fā)中的應(yīng)用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
微信小程序 input表單與redio及下拉列表的使用實(shí)例
這篇文章主要介紹了微信小程序 input表單與redio及下拉列表的使用實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09
使用純JavaScript封裝一個(gè)消息提示條功能示例詳解
這篇文章主要為大家介紹了使用純JavaScript封裝一個(gè)消息提示條功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02

