Vue 3 使用 vue-echarts 的柱状图 barItem 和 x, y 轴点击事件实现

2023-10-31

需求背景:

   最近使用 Vue 3 开发柱状图功能,图表已经绘制完成了。但是突然有需求加进来要可以点击柱状图的柱子 barItem 和 x, y 轴的坐标,然后根据点击的位置,处理不同区域的点击事件。作为 CV 程序员,第一时间搜索网上的解决方案,但是基本都是 Vue 3 搭配 ECharts 实现的,作为菜鸟且项目已经使用 vue-echarts 实现了图标的需求,所以那就只能借鉴ECharts 的实现方案,然后看有没有对应的方法。然后就找到了下面的方案:

1、template 中的Vue-ECharts 的数据绑定和事件响应:

   <v-chart
          ref="barChartRef"
          v-if="isShowBarChart"
          class="bar-chart"
          :option="barOption"
          autoresize
          @click="clickBarInBarChart"
          @zr:click="handleZrClick"
        />

其中 @click 可以监听到大部分的事件,我们本次的重点就是 click 方法;

而 @zr:click 方法是一个图标区域内任意位置点击的事件监听,如果需要全局位置回调处理,那么可以在 @click 方法的基础上排除掉里面能响应的事件之后,做一个事件筛选;

2、数据处理的时候需要在 xAxis 和 yAxis 对象中分别添加:triggerEvent: true 这个键值对,以增加 x 轴和 y 轴在 @click 中的事件响应

const barBaseOption: ECOption = {
  legend: {},
  tooltip: {
    trigger: "axis",
    axisPointer: {
      type: "shadow"
    }
  },
  xAxis: {
    triggerEvent: true
  },
  grid: {
    left: "3%",
    right: "4%",
    bottom: "3%",
    containLabel: true
  },
  dataZoom: [
    {
      type: "inside",
      xAxisIndex: [0]
    }
  ],
  yAxis: {
    triggerEvent: true
  },
  series: []
}

const barOption = ref<ECOption>()

3、然后我们处理点击事件的绑定:

当我们点击 barItem 的时候,params 在控制台的打印:

 当我们点击 x 轴的时候,params 在控制台的打印:

 

当我们点击 y 轴的时候,params 在控制台的打印: 

我们可以看到我们点击的位置不同,params 中的 componentType 的值是不一样的,所以我们可以通过点击事件回调给我们的 params 中的 componentType 参数来区分点击的是哪里,然后做出相应的事件处理;

如果需要根据点击的 index 来获取数据,那么点击 x 轴和 barItem 时,我们使用 dataIndex 就可以。其中点击 barItem 的时候我们还可以获取到点击的柱子的索引,使用 seriesIndex 就行。

const clickBarInBarChart = (params: any) => {
  // 点击 item 的事件
  console.log(params)
  let demandName = ""
  let demandStatus = ""
  let demandUnionId = ""
  const demandStates = ["IN_PROGRESS", "IN_TEST", "PUBLISHED"]
  const currentData = barChartInterfaceData.value[params.dataIndex as number] as BarChartShowData
  switch (params.componentType) {
    case "xAxis":
      // 点击了 X 轴
      demandName = currentData.name
      demandUnionId = currentData.unionid
      break
    case "yAxis":
      // 点击了 Y 轴
      break
    case "series":
      // 点击了 barItem
      demandName = currentData.name
      demandStatus = demandStates[params.seriesIndex as number]
      demandUnionId = currentData.unionid
      break
    default:
      break
  }
  console.log("name: " + demandName + "\t" + "status: " + demandStatus + "unionId: " + demandUnionId)
  // 跳转到需求列表
  router.push({
    name: "demand-list",
    state: {
      name: demandName,
      progress: demandStatus,
      unionId: demandUnionId
    }
  })
}

const handleZrClick = (params: any) => {
  // 图标任意位置点击事件处理
  if (params.topTarget && params.topTarget.parent.anid && params.target === undefined) {
    console.log("点击x或y轴")
  }
}

参考链接:

Vue 中echartsX轴Y轴的点击事件_echarts x轴点击事件_心动止于人海。的博客-CSDN博客

vue-echarts饼图/柱状图点击事件_echarts 饼图点击事件_要成为大V的小v的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue 3 使用 vue-echarts 的柱状图 barItem 和 x, y 轴点击事件实现 的相关文章

随机推荐

  • svm实现二分类_支持向量机原理详解(三): 核函数与非线性SVM

    前文推导了 线性 SVM的对偶问题 见支持向量机原理详解 二 拉格朗日对偶函数 SVM的对偶问题 不过 线性SVM以超平面来划分两类数据 如果数据本身是非线性的 那么以超平面作为决策边界就显得不太适用了 通过引入核函数 可以使SVM适用于非
  • 防雷工程专业术语及雷电浪涌保护器名词解释

    1 雷电次数 当雷暴进行时 隆隆的雷声持续不断 若其间雷声的时间间隔小于15分钟时 不论雷声断续传播的时间有多长 均算作是一次雷暴 若其间雷声的停息时间在15分钟以上时 就把前后分作是两次雷暴 2 雷电小时 就是说在该天文小时内发生过雷暴
  • springboot+mybatis+druid+postgreSql案例

    springboot mybatis druid postgreSql mysql 示例 springboot mybatis druid postgreSql mysql 示例 简介 结构解析 代码剖析 entity层 Dao层 serv
  • Java-System、Math、BigInteger、BigDecimal常用类的使用

    Java System Math BigInteger BigDecimal常用类的使用 1 System类 System类代表系统 系统级的很多属性和控制方法都放置在该类的内部 该类位于java lang包 由于该类的构造器是privat
  • 解决Linux7 ping出现 未知的名称或服务 错误

    问题描述 Linux7在利用命令nmtui进入图形化界面配置Linux的网络后为测试是否成功联网 ping配置的IP成功但ping如www baidu com常见网站时出现 gt ping www baidu com 未知的名称或服务 解决
  • 网络编程知识预备(5) ——libcurl库安装及其编程访问百度首页(断点续传)

    本文为学习笔记 整合课程内容以及下列文章 其中 libcurl函数库常用字段解读部分 参考博文 原文地址 作者 冬冬他哥哥 目录 Libcurl库简介 Libcurl等三方库的通用编译方法 三方库使用前通读方法 库的配置 编译 安装 调用l
  • protobuf生成prototxt文件

    使用protobuf可以分为以下几步 1 proto文件的定义 在这个文件中定义了最终生成的prototxt格式 举个例子如下所示 syntax proto2 package label proto message DetectLabel
  • scrapy缺点

    Scrapy 是一个功能强大的网络爬虫框架 但也有一些缺点 Scrapy 只能爬取静态网页 无法爬取动态网页 Scrapy 只能爬取一个网站的数据 无法爬取多个网站的数据 Scrapy 需要编写代码 对于那些不会编写代码的人来说可能会有些困
  • LiteOS内存管理

    1 内存管理简介 内存管理模块管理系统的内存资源 它是操作系统的核心模块之一 主要包括内存的初始化 分配以及释放 在系统运行过程中 内存管理模块通过对内存的申请 释放操作 来管理用户和OS对内存的使用 使内存的利用率和使用效率达到最优 同时
  • obs无法连接服务器?PotPlayer获取不到视频

    搭建基于nginx的rtmp直播服务器 https hywlovexyc info blog archives 572 rtmp server listen 1935 监听的端口 chunk size 4000 application yu
  • 删除中间节点

    题目 若链表中的某个节点 既不是链表头节点 也不是链表尾节点 则称其为该链表的 中间节点 假定已知链表的某一个中间节点 请实现一种算法 将该节点从链表中删除 例如 传入节点 c 位于单向链表 a gt b gt c gt d gt e gt
  • sqlserver查看数据表结构

    可以通过两种方式 1 sp help 表名 2 sp columns 表名
  • 我的世界服务器config文档,Essentials/配置文件/config.yml

    ops name color none nickname prefix max nick length 15 change displayname true change playerlist true add prefix suffix
  • Unity--虚拟轴

    1 查看虚拟轴 Edit gt project settings gt Input 2 获取虚拟轴 input GetAxis 用法 GetAxis Mouse X GetAxis Mouse Y GetAxis Mouse ScrollW
  • centos7Linux中的lvm、pv、vg、lv,以及Linux扩容,创建新分区

    概念 本着言简意赅的目的 以下概念会在扩容时用到 需熟知 不然会不理解具体操作在干什么 lvm 逻辑卷管理器 Logical Volume Manager 它使系统管理员可以更方便的为应用与用户分配存储空间 在LVM管理下的存储卷可以按需要
  • QT信号槽原理(一)connect函数

    目录 2个类型和1个签名 Qt ConnectionType QMetaMethod MethodType 方法签名 connect函数源码解析 函数原型 第一步 参数检查 第二步 获取信号和槽的index 第三步 检查信号和槽的参数是否匹
  • Opencv之图像固定阈值二值化处理threshold

    目录 一 图像二值化 二 threshold 三 代码 一 图像二值化 定义 图像的二值化 就是将图像上的像素点的灰度值设置为0或255 也就是将整个图像呈现出明显的只有黑和白的视觉效果 灰度值0 黑 灰度值255 白 一幅图像包括目标物体
  • Cygwin编译JNI的环境配置

    一 什么是NDK NDK提供了一系列的工具 帮助开发者快速开发C 或C 的动态库 并能自动将so和java应用一起打包成apk 这些工具对开发者的帮助是巨大的 NDK 集成了交叉编译器 并提供了相应的mk文件隔离CPU 平台 ABI 等差异
  • MacBook怎么安装使用Windows软件和虚拟机?

    作为一名MacBook用户 你可能会发现有些软件和应用程序只适用于Windows操作系统 但别担心 今天我们将介绍两种方法 让你的MacBook轻松安装Windows软件和运行Windows虚拟机 为你的工作 学习和娱乐任务带来更多可能性
  • Vue 3 使用 vue-echarts 的柱状图 barItem 和 x, y 轴点击事件实现

    需求背景 最近使用 Vue 3 开发柱状图功能 图表已经绘制完成了 但是突然有需求加进来要可以点击柱状图的柱子 barItem 和 x y 轴的坐标 然后根据点击的位置 处理不同区域的点击事件 作为 CV 程序员 第一时间搜索网上的解决方案