vue3+ts 之echarts 水球图 liquidFill 的使用

本文介绍了在Vue3+TypeScript环境下如何使用Echarts的水球图插件liquidFill。首先,需要通过npm安装echarts和echarts-liquidfill,然后在项目中按需引入并设置图表配置,展示了一个流量剩余情况的水球图实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

项目框架使用的是 vben
语言用的是 vue3+ts

业务需求需要在页面中使用水球图,在此记录 echarts 图表中的水球图
看下效果 ~
在这里插入图片描述

在这里插入图片描述

写在前面 : 项目中本身已经用了 echarts 的图表,用的是按需引入,且是 TS 语法 (其实这里语法上基本一致)


一、echarts liquidfill.js水球图插件

水球图 (Liquid Fill Chart) 是 echats 是ECharts 的水球图是一个插件类型的图表。
是一个比较适合用来展示单个百分比数据的图表
在 ECharts 官网下载的完整版本不包含水球图,使用时,需要在引入 echarts.js 之后,另外引入水球图对应的 echarts-liquidfill.js

npm install echarts
npm install echarts-liquidfill

注意:echarts-liquidfill@3 版本匹配 echarts@5 版本,echarts-liquidfill@2 版本匹配 echarts@4 版本
其中在我自己引入 npm install echarts-liquidfill 操作的时候报错
最终用 cnpm 搞定了
在这里插入图片描述引入成功后
在这里插入图片描述

二、使用步骤

1.上代码

<!--这里是关于流量剩余情况的图表-->
<template>
  <div ref="chartRef" :style="{ width, height }"></div>
</template>
<script lang="ts" setup>
  import { Ref, ref, watch } from 'vue';
  import { useECharts } from '/@/hooks/web/useECharts';
  import 'echarts-liquidfill';

  const props = defineProps({
    loading: Boolean,
    width: {
      type: String as PropType<string>,
      default: '200px',
    },
    height: {
      type: String as PropType<string>, 
      default: '200px',
    },
    rate: Number,
  });

  const chartRef = ref<HTMLDivElement | null>(null);
  const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
  watch(
    () => props.loading,
    () => {
      if (props.loading) {
        return;
      }
      setOptions({
        backgroundColor: '#fff',
        width: '100%',
        height: '100%',
        series: [
          {
            color: ['#D3E0FF', '#165DFF'], //波浪的颜色
            type: 'liquidFill',
            radius: '90%',
            data: [
              //波浪的高度占比 (第一个是浅色的 : 在传过来的数据上加上一点作为展示效果,第二个用传过来的数据)
              {
                value: props.rate + 0.05,
              },
              {
                value: props.rate,
              },
            ],
            center: ['50%', '50%'], //图在整个画布的位置
            backgroundStyle: {
              color: 'white',
              borderColor: '#F0F2F5', //边框颜色
              borderWidth: 5, //边框粗细
              shadowColor: '#ffffff', //阴影颜色
              shadowBlur: 20, //阴影范围
            },
            label: {
              //水球图里面的文字喝字体等设置
              normal: {
                formatter: function (value) {
                if (!value) {
                  return '加载中';
                } else {
                  return props.rate*100 + '%';
                }
              },
                textStyle: {
                  fontSize: 22,
                },
              },
            },
            outline: {
              //水球图的外层边框 可设置 show:false  不显示
              itemStyle: {
                borderColor: '#DCDCDC',
                borderWidth: 3,
              },
              borderDistance: 0,
            },
            itemStyle: {
              opacity: 0.95,
              shadowColor: 'rgba(0,0,0,0)',
            },
          },
        ],
      });
    },
    { immediate: true },
  );
</script>


总结

主要就是这个水球图不在 echarts 本身的基础图表库中,想用的话还需要单独安装 ~

<think>嗯,用户想在Vue3和TypeScript项目中集成和使用ECharts。首先,我需要回忆一下之前用户提供的引用内容,看看有没有相关的指导。引用1和2提到了在Vue CLI3和TypeScript中安装ECharts和类型声明,引用3和4是关于Vue3的Hooks和3D表的例子。所以,用户现在需要的是如何在Vue3TS使用ECharts,可能包括安装步骤、基本使用、按需引入以及可能的优化。 首先,安装部分应该包括安装echarts和@types/echarts,但根据引用3Vue3可能需要不同的处理,比如使用Hooks或者Composition API。另外,按需引入可以减小打包体积,这也是用户可能关心的问题。然后,代码示例需要适应Vue3的setup语法,比如使用<script setup>和ref来操作DOM。 要注意的是,用户可能遇到类型声明的问题,比如在TS中正确导入ECharts的类型。引用2提到安装@types/echarts,但可能需要检查是否兼容Vue3。另外,引用3提到的Hooks封装可能是一个好的实践,可以推荐给用户,提高代码复用性。 还需要考虑响应式的问题,比如窗口大小变化时表如何自适应。可能需要在组件卸载时销毁表实例,避免内存泄漏。引用4中的3D饼例子可能需要使用echarts-gl,但用户的问题可能更基础,先解决基本集成再扩展高级功能。 总结步骤应该是:安装依赖、创建基础组件、按需引入、优化建议和相关问题。同时,确保代码示例使用Vue3的Composition API和TypeScript,比如使用ref和onMounted生命周期,以及类型声明。</think>### 在 Vue3 + TypeScript 中集成 ECharts 的完整步骤 #### 一、基础集成方法 1. **安装依赖** ```bash npm install echarts --save npm install @types/echarts --save-dev ``` 2. **创建表组件** ```vue <script setup lang="ts"> import { onMounted, ref } from &#39;vue&#39;; import * as echarts from &#39;echarts&#39;; const chartRef = ref<HTMLElement>(); onMounted(() => { if (chartRef.value) { const myChart = echarts.init(chartRef.value); myChart.setOption({ title: { text: &#39;Vue3 示例表&#39; }, tooltip: {}, xAxis: { data: [&#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;] }, yAxis: {}, series: [{ type: &#39;bar&#39;, data: [10, 22, 28, 43, 19] }] }); } }); </script> <template> <div ref="chartRef" style="width: 600px; height: 400px;"></div> </template> ``` #### 二、按需引入优化 ```typescript // 在单独的文件中(如 src/utils/echarts.ts) import * as echarts from &#39;echarts/core&#39;; import { BarChart } from &#39;echarts/charts&#39;; import { TitleComponent, TooltipComponent } from &#39;echarts/components&#39;; import { SVGRenderer } from &#39;echarts/renderers&#39;; echarts.use([BarChart, TitleComponent, TooltipComponent, SVGRenderer]); export default echarts; ``` 使用时替换导入路径即可减少打包体积约70%[^3] #### 三、最佳实践 1. **响应式处理** 添加窗口大小监听: ```typescript import { onUnmounted } from &#39;vue&#39;; const resizeHandler = () => myChart.resize(); window.addEventListener(&#39;resize&#39;, resizeHandler); onUnmounted(() => window.removeEventListener(&#39;resize&#39;, resizeHandler)); ``` 2. **封装 Hooks** 参考引用[3],建议封装成可复用的 composition function: ```typescript export function useEChart(container: Ref<HTMLElement | undefined>, options: echarts.EChartsOption) { let chart: echarts.ECharts | null = null; onMounted(() => { if (container.value) { chart = echarts.init(container.value); chart.setOption(options); } }); onUnmounted(() => { chart?.dispose(); }); return { chart }; } ``` #### 四、3D表支持 如需实现引用[4]的3D饼: ```bash npm install echarts-gl ``` 组件中增加: ```typescript import &#39;echarts-gl&#39;; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值