问题描述: x轴数据太多,且坐标轴标签文字较多,想要把数据全部展示出来会造成文字重叠。
解决思路: echarts提供了dataZoom组件用于区域缩放,但下载的截图只能体现当前展示的内容,可以做成默认正常展示前几个,收缩到一定程度的时候改变axisLabel的角度,斜着展示。
在这里插入图片描述
在这里插入图片描述
解决步骤:

  1. 控制展示文字长度,设置axisLabel,如果字符串长度大于6,则中间的内容用‘…’代替
myOption.xAxis.axisLabel = {
	show: true,
    interval: 0,
    rotate: 0,
    formatter: function(value) {
      let val = value.length > 6 ? value.substr(0, 3) + "..." + value.substr(value.length - 3, value.length - 1) : value;
      return val;
    },
}
  1. 设置dataZoom,根据x轴数据的多少控制dataZoom是否展示和有效
let count = 6;
let showDataZoom = chartInfo.xData.length <= count ? false : true;
let settingEnd = (count / chartInfo.xData.length) * 100;
myOption.dataZoom = [
    {
        show: showDataZoom,  // 是否展示
        xAxisIndex: [0],  // 控制第一个x轴
        height: 15,
        left: 100,
        right: 100,
        bottom: 0,
        start: 0,  // 数据窗口范围的起始百分比。范围是:0 ~ 100。表示 0% ~ 100%。
        end: settingEnd,  // 数据窗口范围的结束百分比。范围是:0 ~ 100。
        handleSize: "110%",
        zoomLock: true, //是否锁定选择区域(或叫做数据窗口)的大小。如果设置为 true
    },
    {
        type: "inside",  // 内置型数据区域缩放组件,用户可以在坐标系上通过鼠标拖拽、鼠标滚轮、手指滑动(触屏上)来缩放或漫游坐标系
        show: showDataZoom,
        disabled: !showDataZoom,  // 是否停止组件的功能
        height: 15,
        left: 100,
        right: 100,
        start: 0,
        end: settingEnd,
    },
];
  1. 监听缩放事件,当收缩到一定程度的时候(end >= settingEnd),改变axisLabel的旋转角度rotate,根据不同的触发方式,会产生两种类型的参数。滚轮滚动时获取到的参数是一个对象,对象中的batch属性是一个数组,需要获取的end和start在数组第一项中的对象中;鼠标拖动时获取到的也是一个对象,但可以在对象中直接获取end和start的值。

    滚轮滚动触发的‘dataZoom’事件参数:
    在这里插入图片描述
    鼠标拖动触发的‘dataZoom’事件参数:
    鼠标拖动触发的‘dataZoom’事件参数

鼠标滚轮滚动时缩放,将获取到的数值赋值给设置的myOption.dataZoom的end属性,start属性设置为0,确保缩放的时候start为0不变,只变更end的值。当end大于等于设定的settingEnd时,设置axisLable旋转角度为35,小于时复原。

myChart.on('dataZoom', params => {
	//consoloe.log(params)
    let start = 0;
    let end = 0;
    if(params.batch) {
    	// 鼠标滚轮触发
        start = 0;
        end = params.batch[0].end;
        myOption.dataZoom[0].start = start;
        myOption.dataZoom[0].end = end;
        myOption.dataZoom[1].start = start;
        myOption.dataZoom[1].end = end;
        if(end >= settingEnd) {
            myOption.xAxis[0].axisLabel.rotate = 35;
        } else {
            myOption.xAxis[0].axisLabel.rotate = 0;
        }
        myChart.setOption(myOption);
    } else {
    	// 鼠标拖动触发
    }
})
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐