
wxml:
<view class="score"> <!-- 餅圖 --> <view class="s_cookies"> <canvas canvas-id="ringCanvas" class="canvas" bindtouchstart="touchHandler"></canvas> <image src="{{radarImg}}" style="width: 260rpx; height: 270rpx;" class="lucky-index-img" /> </view> <!-- 進度條 --> <view class="s_progress"> <view wx:for="{{series}}" wx:key="item.name"> <text style="width:35%;">{{item.name}}</text> <progress class="s_prg" percent="{{item.data}}" border-radius="10" stroke-width="12" active-color="{{item.color}}" active/> <text>+{{item.data}}分</text> </view> </view> </view>
wxss:
.score{ display: flex; justify-content: space-between; } .canvas{ border:1rpx solid #f2f2f2; display: block; position: fixed; left: 9999rpx; z-index: 0; width: 260rpx; height: 270rpx; padding: 0; } .s_progress{ margin-top: 80rpx; margin-right: 4%; } .s_progress text{ width: 20%; font-size: 25rpx; } .s_progress view{ display: flex; } .s_progress view:nth-child(4){ display: none; } .s_prg{ width: 170rpx; overflow: hidden; border-radius: 100px; margin-left: 7px; }
js:
var wxCharts = require('../../../utils/wxcharts.js');//引入圖表插件 var app = getApp(); var ringChart = null; Page({ data: { T_bg: "", series: [{ name: '音樂感受力', data: 0, color: "#FF777B", stroke: true }, { name: '節奏感', data: 0, color: "#226AF9", stroke: true }, { name: '音准概念', data: 0, color: "#04CB9C", stroke: true }, { name: '失分', data: 100, color: "#f2f2f2" //失分餅圖顏色 } ], title: 0, appraise: [], //評價 radarImg: '', //圓形圖片 }, touchHandler: function(e) { console.log(ringChart.getCurrentDataIndex(e)); }, /** * 生命周期函數--監聽頁面加載 */ onLoad: function(options) { var that = this; let ctx = wx.createCanvasContext("ringCanvas", this); //根據wxml定義的canvas-id來創建繪圖context對象。 ctx.draw(false, () => { // 延遲保存圖片,解決生成圖片錯位bug。 setTimeout(() => { this.canvasToTempImage(); }, 100); }); // 處理綁定手機號后傳過來的數據 let score = JSON.parse(options.score) let judge = JSON.parse(options.judge) let { all,all_m,all_r, all_i} = judge; let _appraise = [all, all_m, all_r, all_i]; let { all_num, music_tivity,rhythm_num,intonation_num} = score; let _series = that.data.series; let _score = [music_tivity, rhythm_num, intonation_num, 100 - all_num]; for (let i in _series) { _series[i].data = _score[i] } that.setData({ T_bg: options.jsonTest,//背景圖 appraise: _appraise, series: _series, title: all_num }) }, //將餅圖繪制出來給radarImg canvasToTempImage: function() { wx.canvasToTempFilePath({ canvasId: "ringCanvas", success: (res) => { let tempFilePath = res.tempFilePath; this.setData({ radarImg: tempFilePath, }); } }, this); }, /** * 生命周期函數--監聽頁面初次渲染完成 */ onReady: function(e) { //使用基於canvas的圖表插件wxCharts ringChart = new wxCharts({ animation: false, canvasId: 'ringCanvas', type: 'ring', extra: { ringWidth: 20, pie: { offsetAngle: -45 } }, title: { name: this.data.title + '分', color: '#FD6757', fontSize: 18 }, series: this.data.series, disablePieStroke: true, width: 140, height: 140, dataLabel: false, legend: false, background: '#fff', //總分背景色 }); }, /** * 生命周期函數--監聽頁面顯示 */ onShow: function() { let background =wx.getStorageSync("testbg"); let { all_num, music_tivity, rhythm_num, intonation_num } = wx.getStorageSync("score"); let sugges = wx.getStorageSync("judge"); let that = this let _series = that.data.series;//分數數組 let _score = [music_tivity, rhythm_num, intonation_num, 100 - all_num];//獲取到的分數 for (let i in _series) { _series[i].data = _score[i] } that.setData({ T_bg: background,//背景圖 appraise: sugges,//評價 series: _series, title: all_num//總分 }) }, })
總結:留下一個記錄.........
1.分值餅圖使用了基於canvas的圖表插件wxCharts
2.將傳過來的數據處理放進進度條對應的分值里面去
