vue?echarts移動端踩坑解決記錄
引言
最近手頭一個項目需要做兩個圖,一個是折線圖,一個餅圖。由于是基于Vue的項目,第一時間就想到用vue-echarts來實現(xiàn)。vue-echarts本質(zhì)上也是使用了echarts.js,只是包裝成vue組件。
1、安裝vue-echarts包
npm install vue-echarts
2、折線圖代碼
template:
<echarts :options="trendChart" ref="trendEchart"></echarts>
js:
import ECharts from 'vue-echarts/components/ECharts.vue'; //引用vue-echarts
import "echarts/lib/component/tooltip"; //按需加載相關(guān)的包
import "echarts/lib/chart/pie";
import "echarts/lib/chart/line";
export default {
trendChart: {
grid: {
left: '10%',
top: 52,
},
tooltip: {
trigger: 'axis',
showContent: true,
position:function(p){
return [p[0] + 10000000000, 0]; //不需要顯示彈層信息
},
formatter: (parmes)=>{ //選擇折線圖上的坐標可以獲得相關(guān)值
let value1 = parmes[0];
let value2 = parmes[1];
//拿到值后,需要在哪顯示可以在這操作
}
},
textStyle: {
color: "#999",
},
label:{
fontSize: 44,
},
xAxis: {
type: 'category', //類目的行式,原樣展示
boundaryGap: false, //兩邊留白策略
offset: 3,
axisLine:{
show:false, //是否顯示坐標軸軸線,默認顯示
},
axisTick:{
show: false, //是否顯示坐標軸刻度
},
axisLabel: {
interval: 10000, //默認1,表示【隔一個標簽顯示一個標簽】
showMinLabel: true, //x軸只需要展示最小的和最大的值
showMaxLabel: true,
fontSize: 20,
//padding: [10, 0, 0, 0], 這里可以設(shè)置坐標軸的標簽的padding值
},
data: [],
},
yAxis: {
type: 'value',
boundaryGap: false,
axisLine:{
show:false,
},
axisLabel:{
fontSize: 22,
formatter: '{value}%' //格式化標簽值
},
axisTick:{
show: false,
},
lineStyle: {
//網(wǎng)絡(luò)線設(shè)置(只作用于非類目鈾)
show: true,
color: "#f5f5f5",
width: 1,
type: "solid"
},
splitNumber: 5, //Y軸分格為幾段
min: value => {
return value.min - 1; //最小顯示的值
},
max: null, //最大顯示的值
interval: 2 //間隔
},
series: [{
name: '本組合',
type: 'line',
silent: false,
showSymbol: false, //不顯示折線上的數(shù)據(jù)點,只在hover的時候顯示
smooth: false, //0-1之間,true時為曲線,flase為折線,線彎曲度
color: '#e2b256',
lineStyle:{
width: 3, //線條寬度
},
data: []
},{
name: '上證指數(shù)',
type: 'line',
silent: false,
showSymbol: false, //不顯示折線上的數(shù)據(jù)點,只在hover的時候顯示
smooth: false, //0-1之間,true時為曲線,flase為折線,線彎曲度
color: '#5eb8e2',
data: []
}]
},
},
methods: {
//計算Y鈾min,max,interval三個值,保證Y鈾能夠均等
computeYaxis(data) {
let allValues = [];
for (let k of data) {
for (let v of Object.values(k)) {
if (Number(v)) {
allValues.push(v);
}
}
}
//拿到數(shù)據(jù)當中的最小值
const min = Number.parseFloat(Math.min(...new Set(allValues))).toFixed(2);
//讓顯示在坐標上的最小值<數(shù)據(jù)當中的最小值
const newMin = min - 1;
//拿到數(shù)據(jù)當中的最大值
const max = Number.parseFloat(Math.max(...new Set(allValues))).toFixed(2);
let interval = Math.abs(
//移動端interval必須取整數(shù)才生效
Math.ceil(Number.parseFloat((max - min) / 5).toFixed(2))
);
let newMax = Number.parseFloat(newMin + interval * 5).toFixed(2);
//存在算出來的newMax值可能小于數(shù)據(jù)當中的max值
if (newMax < max) {
interval++;
newMax = Number.parseFloat(newMin + interval * 5).toFixed(2);
}
this.trendChart.yAxis.max = newMax;
this.trendChart.yAxis.interval = interval;
},
},
components: {
echarts: ECharts,
}3、折線圖效果
初始狀態(tài)


mouseover狀態(tài)

移動端還需要考慮當touchmove到非echarts的地方,需要重置到初始狀態(tài),并到選中的當前坐標去掉等問題。
4、餅圖代碼
template:
<echarts :options="overViewOption"></echarts>
js:
export defalut {
//pie圖
pieColor: ["#edce91", "#deab6a", "#ffe2ac", "#fcefd6","#77623b"],
overViewOption: {
lineStyle: {
color: "#e0bf80"
},
textStyle: {
color: "#333",
fontSize: 26
},
hoverOffset: 0,
series: [
{
type: "pie",
color: ["#edce91", "#deab6a", "#ffe2ac", "#fcefd6","#77623b"],
//每一塊對應(yīng)的色值
hoverAnimation: false,
// label:{
// normal:{
// show:false
// }
// },
radius: ["40%", "80%"],
data: [],
}
]
},
//從后端獲取的數(shù)據(jù)
let mainModelOverview = data.mainModelOverview.map((item,index) => {
return {
value: Number.parseFloat(item.fundPercent),
name: item.fundType + item.fundPercent +'%',
emphasis:{
itemStyle:{
color: this.pieColor[index]
//鼠標放在pie圖上對應(yīng)區(qū)域高亮顏色,防止高亮變色(這是個坑)
}
},
};
});
this.$set(this.overViewOption.series[0], "data", mainModelOverview);5、拼圖效果

6、總結(jié)坑點
官網(wǎng)給的示例都是基于pc端,并沒有移動端的示例。有些配置項的示例是用的echarts3,所以在使用的時候,同一個配置元素放在示例上編輯是沒有問題的,但一旦放在項目當中就不生效(本項目是基于echarts4)。
- 事件支持:mouseover,click等pc端的事件。在移動端,touchmove事件需要取消選中狀態(tài)需要自己加事件了。
- interval: 官方給的建議是不推薦使用。示例給的interval可以為小數(shù)。但在移動端interval加小數(shù)卻不管用,如果想均等每一列,并能夠正確展示數(shù)據(jù),那么需要自己去計算了。
- api太多了,眼花...頭疼...
不過,不得不佩服echarts的強大,能夠支持幾乎所有的定制化需求,具體怎么去實現(xiàn)你的需求,需要不斷的嘗試。在此需要這篇記錄能夠幫助到大家的工作,也希望大家能夠給予支持
以上就是vue echarts移動端踩坑解決記錄的詳細內(nèi)容,更多關(guān)于vue echarts移動端踩坑的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決Vue.js應(yīng)用回退或刷新界面時提示用戶保存修改問題
這篇文章主要介紹了Vue.js應(yīng)用回退或刷新界面時提示用戶保存修改問題,本文通過兩種手段防止運營編輯時丟失數(shù)據(jù),具體內(nèi)容詳情,感興趣的朋友跟隨小編一起看看吧2019-11-11
Laravel 如何在blade文件中使用Vue組件的示例代碼
這篇文章主要介紹了Laravel 如何在blade文件中使用Vue組件,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
使用VueRouter的addRoutes方法實現(xiàn)動態(tài)添加用戶的權(quán)限路由
這篇文章主要介紹了使用VueRouter的addRoutes方法實現(xiàn)動態(tài)添加用戶的權(quán)限路由,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06
vue ElementUI的from表單實現(xiàn)登錄效果的示例
本文主要介紹了vue ElementUI的from表單實現(xiàn)登錄效果的示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09

