uni-app在微信小程序中echarts层级问题,覆盖其他元素会被echarts遮挡,请问如何解决

发布于 1周前 作者 songsunli 来自 Uni-App

uni-app在微信小程序中echarts层级问题,覆盖其他元素会被echarts遮挡,请问如何解决

微信小程序与 ECharts 层级问题

在微信小程序中使用 ECharts 时,会出现层级问题,ECharts 会覆盖其他内容,即使修改 z-index 也无法解决。

1 回复

在uni-app开发微信小程序时,遇到echarts图表的层级问题确实比较常见。这通常是因为echarts的canvas元素默认绘制在其他DOM元素之上,导致其他元素被遮挡。解决这个问题可以通过调整canvas的z-index或者利用微信小程序提供的原生组件层级控制机制。不过,由于微信小程序对DOM操作有限制,直接使用z-index往往不起作用,因此需要采取一些其他策略。

以下是一个利用微信小程序的cover-view组件来解决echarts遮挡问题的示例代码:

  1. 在页面的wxml文件中,使用cover-view来包裹需要显示在最上层的元素
<view class="container">
  <!-- echarts容器 -->
  <ec-canvas id="mychart-dom-bar" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
  
  <!-- 使用cover-view来确保元素显示在echarts之上 -->
  <cover-view class="overlay">
    <button class="btn-on-top">按钮在图表之上</button>
  </cover-view>
</view>
  1. 在对应的wxss文件中,定义样式
.container {
  position: relative;
  width: 100%;
  height: 100%;
}

/* 确保cover-view覆盖在echarts之上 */
.overlay {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
}

.btn-on-top {
  padding: 10px 20px;
  background-color: rgba(0, 0, 0, 0.5);
  color: white;
  border: none;
  border-radius: 5px;
}
  1. 在页面的js文件中,初始化echarts图表
import * as echarts from '../../ec-canvas/echarts';

function initChart(canvas, width, height, dpr) {
  const chart = echarts.init(canvas, null, {
    width: width,
    height: height,
    devicePixelRatio: dpr // new
  });
  canvas.setChart(chart);

  const option = {
    // echarts配置项
    title: {
      text: 'ECharts 示例'
    },
    tooltip: {},
    xAxis: {
      data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
    },
    yAxis: {},
    series: [{
      name: '销量',
      type: 'bar',
      data: [5, 20, 36, 10, 10, 20]
    }]
  };
  chart.setOption(option);
  return chart;
}

export default {
  data() {
    return {
      ec: {
        onInit: initChart
      }
    };
  }
}

通过上述方式,利用cover-view组件可以确保该组件内的元素显示在echarts图表之上,从而解决层级遮挡问题。注意,cover-view组件主要用于覆盖原生组件(如video、canvas等),在小程序中使用时需要谨慎考虑其对布局的影响。

回到顶部