• home > webfront > AppDev > taro >

    小程序echarts图表全屏展示方案探讨与问题汇总总结

    Author:zhoulujun Date:

    这里是遇到的一些问题汇总怎么在微信小程序实现echarts横向展示,不是横屏,仅图表实现横向?试图引用过wxcharts js,让父级旋转90°,但手

    这里是遇到的一些问题汇总


    怎么在微信小程序实现echarts横向展示,不是横屏,仅图表实现横向?

    试图引用过wxcharts.js,让父级旋转90°,但手机预览时,图表不显示;另使用echarts,即便父级旋转90°,图表依然是纵向的,不会随着父级旋转

    问题:想要在小程序中横屏展示图表,方便一屏能够展示更多信息。

    如果通过旋转echarts组件的方式来实现,则会出现touch事件的坐标轴交换的问题。

    如果通过交换x轴y轴来实现,则会出现toolbox组件和legend组件无法旋转的问题


    解决方案:

    小程序基础库2.4.0之后可以在json文件中配置pageOrientation来实现小程序的横屏,然后不用修改其他配置直接正常加载图表。这样就不会出现上述问题。

    小程序echarts图表横屏展示问题 https://blog.csdn.net/LIsmooth/article/details/109328776

    其实这里里面需要解决,就是绘制的长宽问题。

    if (rotated) {
      this.chart = this.echarts.init(canvas, null, {
        width: height,
        height: width,
        devicePixelRatio: dpr, // new
      });
    } else {
      this.chart = this.echarts.init(canvas, null, {
        width: width,
        height: height,
        devicePixelRatio: dpr, // new
      });
    }

    这样就解决了横屏问题。但是点击,还是错位的

    private _touchEnd = (e) => {
      if (this.chart) {
        const touch = e.changedTouches ? e.changedTouches[0] : {};
        var handler = this.chart.getZr().handler;
        const {rotated} = this.props
        const {x, y} = touch;
        let zrX = x, zrY = y;
        if (rotated) {
          zrX = y;
          zrY = x
        }
        handler.dispatch('mouseup', {
          zrX,
          zrY
        });
        handler.dispatch('click', {
          zrX,
          zrY
        });
        handler.processGesture(wrapTouch(e, rotated), 'end');
      }
    };

    这样的话,就修正了旋转的问题……

    echarts使用getZr()点击事件获取柱状图数据

    当柱状图数据较少的时候,直接点击柱子不好点击,使用getZr()此种方法可以点击柱子所在的这一列(阴影部分),即可拿到对应数据

    chart.setOption(option);
    chart.off('click'); //防止触发两次点击事件
    chart.getZr().on('click', (params) => {
      let pointInPixel = [params.offsetX, params.offsetY];
      if (chart.containPixel('grid', pointInPixel)) {
        let pointInGrid = chart.convertFromPixel({
          seriesIndex: 0
        }, pointInPixel);
        let xIndex = pointInGrid[0]; //索引
        let handleIndex = Number(xIndex);
        let seriesObj = chart.getOption(); //图表object对象
        console.log(handleIndex, seriesObj);
      }
    })

    这个方案解决来源于:https://blog.csdn.net/weixin_54366356/article/details/117324448




    转载本站文章《小程序echarts图表全屏展示方案探讨与问题汇总总结》,
    请注明出处:https://www.zhoulujun.cn/html/webfront/AppDev/taro/8730.html