vue echarts移动端踩坑解决记录

 更新时间:2023年07月26日 09:28:31   作者:emcty  
这篇文章主要为大家介绍了vue echarts移动端踩坑解决记录,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

最近手头一个项目需要做两个图,一个是折线图,一个饼图。由于是基于Vue的项目,第一时间就想到用vue-echarts来实现。vue-echarts本质上也是使用了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"; //按需加载相关的包
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)=>{  //选择折线图上的坐标可以获得相关值
          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], 这里可以设置坐标轴的标签的padding值
        },
        data: [], 
    },
    yAxis: {
        type: 'value',
        boundaryGap: false,
        axisLine:{
          show:false,
        },
        axisLabel:{
          fontSize: 22,
          formatter: '{value}%'  //格式化标签值
        },
        axisTick:{
          show: false,
        },
       lineStyle: {
        //网络线设置(只作用于非类目铀)
        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, //不显示折线上的数据点,只在hover的时候显示
        smooth: false, //0-1之间,true时为曲线,flase为折线,线弯曲度
        color: '#e2b256',
        lineStyle:{
          width: 3, //线条宽度
        },
        data: []
    },{
      name: '上证指数',
      type: 'line',
      silent: false,
      showSymbol: false, //不显示折线上的数据点,只在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);
          }
        }
      }
      //拿到数据当中的最小值
      const min = Number.parseFloat(Math.min(...new Set(allValues))).toFixed(2);
      //让显示在坐标上的最小值<数据当中的最小值
      const newMin = min - 1;
      //拿到数据当中的最大值
      const max = Number.parseFloat(Math.max(...new Set(allValues))).toFixed(2);
      let interval = Math.abs(
         //移动端interval必须取整数才生效
        Math.ceil(Number.parseFloat((max - min) / 5).toFixed(2)) 
      );
      let newMax = Number.parseFloat(newMin + interval * 5).toFixed(2);
      //存在算出来的newMax值可能小于数据当中的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、折线图效果

初始状态

mouseover状态

移动端还需要考虑当touchmove到非echarts的地方,需要重置到初始状态,并到选中的当前坐标去掉等问题。

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"], 
        //每一块对应的色值
        hoverAnimation: false,
        // label:{
        //   normal:{
        //     show:false
        //   }
        // },
        radius: ["40%", "80%"],
        data: [],
      }
    ]   
 },
 //从后端获取的数据
 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图上对应区域高亮颜色,防止高亮变色(这是个坑)
          }
        },   
    }; 
  }); 
  this.$set(this.overViewOption.series[0], "data", mainModelOverview);

5、拼图效果

6、总结坑点

官网给的示例都是基于pc端,并没有移动端的示例。有些配置项的示例是用的echarts3,所以在使用的时候,同一个配置元素放在示例上编辑是没有问题的,但一旦放在项目当中就不生效(本项目是基于echarts4)。

  • 事件支持:mouseover,click等pc端的事件。在移动端,touchmove事件需要取消选中状态需要自己加事件了。
  • interval: 官方给的建议是不推荐使用。示例给的interval可以为小数。但在移动端interval加小数却不管用,如果想均等每一列,并能够正确展示数据,那么需要自己去计算了。
  • api太多了,眼花...头疼...

不过,不得不佩服echarts的强大,能够支持几乎所有的定制化需求,具体怎么去实现你的需求,需要不断的尝试。在此需要这篇记录能够帮助到大家的工作,也希望大家能够给予支持

以上就是vue echarts移动端踩坑解决记录的详细内容,更多关于vue echarts移动端踩坑的资料请关注脚本之家其它相关文章!

相关文章

  • 浅谈vue项目如何打包扔向服务器

    浅谈vue项目如何打包扔向服务器

    本篇文章主要介绍了浅谈vue项目如何打包扔向服务器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Vue2 this直接获取data和methods原理解析

    Vue2 this直接获取data和methods原理解析

    这篇文章主要为大家介绍了Vue2 this直接获取data和methods原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 解决Vue.js应用回退或刷新界面时提示用户保存修改问题

    解决Vue.js应用回退或刷新界面时提示用户保存修改问题

    这篇文章主要介绍了Vue.js应用回退或刷新界面时提示用户保存修改问题,本文通过两种手段防止运营编辑时丢失数据,具体内容详情,感兴趣的朋友跟随小编一起看看吧
    2019-11-11
  • Laravel 如何在blade文件中使用Vue组件的示例代码

    Laravel 如何在blade文件中使用Vue组件的示例代码

    这篇文章主要介绍了Laravel 如何在blade文件中使用Vue组件,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 使用VueRouter的addRoutes方法实现动态添加用户的权限路由

    使用VueRouter的addRoutes方法实现动态添加用户的权限路由

    这篇文章主要介绍了使用VueRouter的addRoutes方法实现动态添加用户的权限路由,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • vue ElementUI的from表单实现登录效果的示例

    vue ElementUI的from表单实现登录效果的示例

    本文主要介绍了vue ElementUI的from表单实现登录效果的示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Vue实现聊天界面

    Vue实现聊天界面

    这篇文章主要为大家详细介绍了Vue实现聊天界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Vue状态管理之使用Pinia代替Vuex

    Vue状态管理之使用Pinia代替Vuex

    这篇文章主要介绍了Vue状态管理。下面文章主要围绕着使用Pinia代替Vuex的相关资料展开具体内容,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • Vue开发实现滑动验证组件

    Vue开发实现滑动验证组件

    这篇文章主要为大家详细介绍了如何利用Vue开发实现简单的滑动验证组件,并且适配移动和PC,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-07-07
  • vue如何通过$router.push传参数

    vue如何通过$router.push传参数

    这篇文章主要介绍了vue如何通过$router.push传参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06

最新评论