uni-app,微信小程序中,使用ucharts配合uview的tabs,切换时图表重叠

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

uni-app,微信小程序中,使用ucharts配合uview的tabs,切换时图表重叠

问题描述

使用v-show发生重叠,使用v-if图表不加载

图片

<view class="form-card mb-15" v-if="cuurenTypeValue === 2">  
  <qiun-data-charts  
    type="line"  
    opts="opts"
    reshow="cuurenTypeValue === 2"
    chartData="chartData"
    canvas2d="true"
    canvasId="MawdhxCzugjPaOwlPuEHeHgTMxVNbkCc"/>
</view>  

图片


1 回复

在uni-app中使用ucharts配合uview的tabs组件时,遇到图表重叠的问题,通常是因为在切换tabs时,前一个tab的图表没有被正确销毁或隐藏,而新的图表又直接渲染在了相同的位置。为了解决这个问题,你可以在每个tab切换时,对前一个tab的图表进行销毁操作,或者隐藏前一个tab的图表容器,确保每次只渲染一个图表。

以下是一个简单的示例代码,展示了如何在uni-app中结合ucharts和uview的tabs组件,实现切换时不重叠图表的功能。

  1. 页面结构 (pages/index/index.vue):
<template>
  <view>
    <u-tabs @change="handleTabChange" :list="tabList"></u-tabs>
    <view v-if="currentTab === 'chart1'">
      <canvas canvas-id="chart1" style="width: 100%; height: 400px;"></canvas>
    </view>
    <view v-if="currentTab === 'chart2'">
      <canvas canvas-id="chart2" style="width: 100%; height: 400px;"></canvas>
    </view>
  </view>
</template>

<script>
import * as uCharts from '@/static/ucharts.min.js';

export default {
  data() {
    return {
      tabList: [{title: 'Chart 1'}, {title: 'Chart 2'}],
      currentTab: 'chart1',
      chart1: null,
      chart2: null,
    };
  },
  methods: {
    handleTabChange(index) {
      this.currentTab = this.tabList[index].title;
      this.destroyChart();
      this.initChart();
    },
    destroyChart() {
      if (this.chart1) {
        this.chart1.clear();
        this.chart1 = null;
      }
      if (this.chart2) {
        this.chart2.clear();
        this.chart2 = null;
      }
    },
    initChart() {
      if (this.currentTab === 'chart1') {
        this.chart1 = new uCharts({
          // 配置项
          canvasId: 'chart1',
          type: 'line',
          // 其他配置...
        });
      } else if (this.currentTab === 'chart2') {
        this.chart2 = new uCharts({
          // 配置项
          canvasId: 'chart2',
          type: 'bar',
          // 其他配置...
        });
      }
    }
  },
  onReady() {
    this.initChart();
  }
};
</script>
  1. 说明
    • 使用u-tabs组件来创建tab切换效果。
    • 根据currentTab的值动态渲染对应的canvas元素。
    • handleTabChange方法中,先调用destroyChart方法销毁前一个tab的图表实例,然后调用initChart方法初始化当前tab的图表实例。
    • destroyChart方法中,检查并销毁当前已存在的图表实例。
    • initChart方法中,根据当前tab初始化对应的图表实例。

通过这种方式,你可以确保在切换tabs时,图表不会重叠,且每次只渲染一个图表。

回到顶部