https://gitcode.net/mirrors/ecomfe/echarts-for-weixin?utm_source=csdn_github_accelerator (具體官網鏈接)
https://echarts.apache.org/zh/builder.html(在線定制鏈接)
微信小程序使用echarts,實現左右雙Y軸,動態獲取數據,生成折線圖
本來使用的是wxcharts,但發現實現不了左右雙y軸的效果,就換成echarts
要實現這樣的效果,需要以下幾步:
(1)去github下載插件,放進自己的項目里
只需要將名稱是ec-canvas的文件夾放進自己項目里。
像這樣:
(2)分別寫小程序的四個文件
1 echart.json 2 { 3 "usingComponents": { 4 "ec-canvas": "../../ec-canvas/ec-canvas" 5 } 6 }
1 <!--echart.wxml--> 2 <view class="container"> 3 <ec-canvas id="myechart" canvas-id="graph" ec="{{ ec }}"></ec-canvas> 4 </view>
1 echart.wxss 2 .container{ 3 margin: 0; 4 padding: 0 5 }
echart.js
這里分步寫:
第一步:導入 echarts 插件
import * as echarts from
'../../ec-canvas/echarts'
;
第二步:寫在Page外的方法
1 function echart(chart, leftData, rightData) {//leftData是坐標系左邊y軸,rightData是右邊y軸 2 var option = { 3 //網格 4 grid: { 5 bottom: 80, 6 show: true, 7 // containLabel: true 8 }, 9 //圖例 10 legend: { 11 data: [{ 12 name: 'leftData', 13 textStyle: { //設置顏色 14 color: '#6076FF', 15 fontSize: '14', 16 } 17 }, 18 { 19 name: 'rightData', 20 textStyle: { 21 color: '#FFC560', 22 fontSize: '14', 23 } 24 } 25 ], 26 x: 'left', 27 bottom: 15, 28 left: 30 29 }, 30 //x軸 31 xAxis: { 32 type: 'category', 33 boundaryGap: false, 34 disableGrid: true, //繪制X網格 35 data: ['', '', '', '', '', '', '', '', ''], 36 splitLine: { 37 show: true, 38 // 改變軸線顏色 39 lineStyle: { 40 // 使用深淺的間隔色 41 color: ['#DDDDDD'] 42 } 43 }, 44 //去掉刻度 45 axisTick: { 46 show: false 47 }, 48 //去掉x軸線 49 axisLine: { 50 show: false 51 }, 52 }, 53 //y軸 54 yAxis: [{ 55 name: 'mph', 56 type: 'value', 57 min: 0, 58 // max: 40, 59 //y標軸名稱的文字樣式 60 nameTextStyle: { 61 color: '#FFC560' 62 }, 63 //網格線 64 splitLine: { 65 show: true, 66 lineStyle: { 67 color: ['#DDDDDD'] 68 } 69 }, 70 //去掉刻度 71 axisTick: { 72 show: false 73 }, 74 //去掉y軸線 75 axisLine: { 76 show: false 77 }, 78 }, 79 { 80 name: 'g', 81 type: 'value', 82 // max: 4, 83 min: 0, 84 nameTextStyle: { 85 color: '#6076FF' 86 }, 87 //去掉刻度 88 axisTick: { 89 show: false 90 }, 91 //去掉y軸線 92 axisLine: { 93 show: false 94 }, 95 96 } 97 ], 98 99 series: [{ 100 name: 'leftData', 101 type: 'line', 102 animation: true, //動畫效果 103 symbol: 'none', 104 //折線區域 105 areaStyle: { 106 //漸變顏色 107 color: { 108 type: 'linear', 109 x: 0, 110 y: 0, 111 x2: 0, 112 y2: 1, 113 colorStops: [{ 114 offset: 0, 115 color: '#6076FF' // 0% 處的顏色 116 }, { 117 offset: 1, 118 color: 'rgba(96,118,255,0.1)' // 100% 處的顏色 119 }], 120 global: false, // 缺省為 false 121 }, 122 }, 123 //折線寬度 124 lineStyle: { 125 width: 2 126 }, 127 color: '#6076FF', 128 data: leftData // 后台傳過來的動態數據 129 //設置固定的數據 130 // data: [ 131 // 23, 30, 20, 23, 30, 26, 20, 25, 25 132 // ] 133 }, 134 { 135 name: 'rightData', 136 type: 'line', 137 yAxisIndex: 1, 138 animation: true, 139 symbol: 'none', 140 areaStyle: { 141 color: { 142 type: 'linear', 143 x: 0, 144 y: 0, 145 x2: 0, 146 y2: 1, 147 colorStops: [{ 148 offset: 0, 149 color: '#FFC560' // 0% 處的顏色 150 }, { 151 offset: 1, 152 color: 'rgba(255, 197, 96,0.3)' // 100% 處的顏色 153 }], 154 global: false, // 缺省為 false 155 }, 156 }, 157 lineStyle: { 158 width: 2 159 }, 160 color: '#FFC560', 161 data: rightData,//后台傳過來的動態數據 162 //設置固定的數據 163 // data: [ 164 // 2, 1, 0.5, 0.9, 2, 1.0, 0.6, 2, 0.5 165 // ] 166 }] 167 } 168 }
第三步:寫在Page里的方法,(包括onLoad(),初始化)
1 /** 2 * 頁面的初始數據 3 */ 4 data: { 5 ec: { 6 lazyLoad: true //初始化加載 7 } 8 }, 9 onLoad: function (options) { 10 let that = this; 11 this.oneComponent = this.selectComponent('#mychart'); 12 let url = "xxxxx"; 13 let params = { 14 "openId": options.id, 15 }; 16 wx.request({ 17 url: "xxxx", 18 method: 'POST' 19 data: params, 20 header: header, 21 success: (res) => { 22 that.setData({ 23 leftData: xxx,//從后台獲取的數據 24 rightData: xxxx //從后台獲取的數據 25 }); 26 }, 27 //給圖表加上數據 28 that.initGraph(that.data.leftData, that.data.rightData) 29 }) 30 }
初始化圖表
1 initGraph: function (leftData, rightData) { 2 this.oneComponent.init((canvas, width, height) => { 3 const chart = echarts.init(canvas, null, { 4 width: width, 5 height: height 6 }); 7 initChart(chart, leftData, rightData); 8 this.chart = chart; 9 return chart; 10 }); 11 }
發包時記得壓縮,不然會很大,就這一個都這么大
<ec-canvas id="mychart-dom-line" canvas-id="mychart-line" ec="{{ ec }}" force-use-old-canvas="true"></ec-canvas> 添加這個force-use-old-canvas="true",在pc端調試時可以讓圖表隨屏幕滾動。在真機調試時也要加上這個,否則會報錯。在發布上線時把這個去掉,影響滑動圖表失真
真機運行問題,canvans層級過高,影響彈出框,在彈出框上面了,一種解決方式;https://developers.weixin.qq.com/miniprogram/dev/component/cover-view.html


顯然這種方式不太好
https://blog.csdn.net/liya_nan/article/details/82023761
小程序手指滑入事件
https://github.com/qbright/wx-touch-event
小程序通過npm安裝插件
https://www.cnblogs.com/rui-yang/p/12374040.html