echarts:通过自定义工具栏来实现一些功能

前言

通常当柱状图数据过多时一般会添加一个滑块,如下图:

echarts:通过自定义工具栏来实现一些功能
最近客户提出了一个要求,一开始显示的是前3条数据,想看第4条数据的话可以用滑块进行拖动。可能是客户鼠标比较灵敏吧,不好操作。客户想要一个类似滚动条箭头可以点击的功能,如:
echarts:通过自定义工具栏来实现一些功能
思考了很久,最终觉得可以通过 toolbox 工具栏来实现。

官方API:https://echarts.apache.org/zh/option.html#toolbox

; 实现页面布局

这里主要是接着自定义工具栏来实现,常用属性基本上就是下面这些,其他属性可以查看官方文档。
icon:图标,我这里使用的是svg格式, path:// 是固定的,后面的是svg的path属性值,就是路径

toolbox: {
     show: true,
     orient: 'horizontal',
     itemSize: 15,
     itemGap: 8,
     showTitle: true,
     feature: {
         myLeft: {
             show: true,
             title: '上一个',
             icon: 'path://M735.208665 65.582671l-446.41733 446.417329 446.41733 446.417329z',
             onclick: () => {
                 alert('上一个');
             }
         },
         myRight: {
             show: true,
             title: '下一个',
             icon: 'path://M288.791335 65.582671l446.41733 446.417329-446.41733 446.417329z',
             onclick: () => {
                 alert('下一个');
             }
         }
     },
     iconStyle: {
         color: '#869AD7'
     },
     right: 3
 },

效果图

关于位置、图标样式可以自己定义。

echarts:通过自定义工具栏来实现一些功能

功能

从上面可以看到,每一个图标都有一个点击事件。然后我们可以借助官方提供的 action 来实现

myChart.dispatchAction({
    type: 'dataZoom',

    dataZoomIndex: 0,

    startValue: 6,

    endValue: 7
});

echarts:通过自定义工具栏来实现一些功能
echarts:通过自定义工具栏来实现一些功能

完整代码

<template>
    <div id="demo"></div>
</template>

<script setup lang="ts">
import * as echart from 'echarts';
import { onMounted, ref } from 'vue';

const start = ref(7);
const end = ref(9);

onMounted(() => {
    const myChart = echart.init(document.getElementById('demo'));
    const option = {
        tooltip: {
            trigger: 'axis',
            axisPointer: {
                type: 'shadow'
            }
        },
        grid: {
            top: 50,
            bottom: 50,
            right: 30
        },
        toolbox: {
            show: true,
            orient: 'horizontal',
            itemSize: 15,
            itemGap: 8,
            showTitle: true,
            feature: {
                myLeft: {
                    show: true,
                    title: '上一个',
                    icon: 'path://M735.208665 65.582671l-446.41733 446.417329 446.41733 446.417329z',
                    onclick: () => {
                        if (end.value < 9) {
                            start.value += 1;
                            end.value += 1;
                        }
                        myChart.dispatchAction({
                            type: 'dataZoom',

                            dataZoomIndex: 0,

                            startValue: start.value,

                            endValue: end.value
                        });
                    }
                },
                myRight: {
                    show: true,
                    title: '下一个',
                    icon: 'path://M288.791335 65.582671l446.41733 446.417329-446.41733 446.417329z',
                    onclick: () => {
                        if (start.value > 0) {
                            start.value -= 1;
                            end.value -= 1;
                        }
                        myChart.dispatchAction({
                            type: 'dataZoom',

                            dataZoomIndex: 0,

                            startValue: start.value,

                            endValue: end.value
                        });
                    }
                }
            },
            iconStyle: {
                color: '#869AD7'
            },
            right: 3
        },
        xAxis: {
            type: 'value',
            splitLine: {
                lineStyle: {
                    type: 'dashed'
                }
            }
        },
        yAxis: {
            type: 'category',
            data: [
                'ten',
                'nine',
                'eight',
                'seven',
                'six',
                'five',
                'four',
                'three',
                'two',
                'one'
            ]
        },

        dataZoom: [
            {

                show: true,

                yAxisIndex: 0,

                filterMode: 'empty',

                width: 15,
                height: '70%',

                showDataShadow: false,

                left: '95%',

                startValue: 10,

                endValue: 8,

                zoomLock: true
            }
        ],
        series: [
            {
                name: 'Cost',
                type: 'bar',
                data: [12, 23, 34, 56, 43, 67, 89, 90, 76, 29]
            }
        ]
    };
    myChart.setOption(option);
});
</script>

<style lang="scss" scoped>
#demo{
    width: 600px;
    height: 300px;
    border: 1px solid red;
    padding-right: 30px;
}
</style>

效果图

echarts:通过自定义工具栏来实现一些功能
注意点:
关于起始值、结束值的初始值是几与你滑块的方向有关是水平还是垂直。另外还与滑块的位置有关,滑块一开始是上面还是下面。

bug

之前忽略了一个问题,就是当滑块滑动后要更新开始值和结束值。可以通过给滑块添加监听事件

myChart.on('datazoom', params => {
     this.$nextTick(() => {

         console.log(params,this.start,this.end);
         console.log(myChart.getOption());
         this.start = (myChart.getOption()).dataZoom[0].startValue;
         this.end = (myChart.getOption()).dataZoom[0].endValue;
     });
 });

不要直接使用滑块回调的参数,有问题,很难进行处理。使用 getOption()来获取,这是最方便的

Original: https://blog.csdn.net/weixin_41897680/article/details/127803495
Author: @我不认识你
Title: echarts:通过自定义工具栏来实现一些功能

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/656407/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • kaggle房价预测-回归模型

    目录 1 项目背景 2 初始数据分析 目标值分析 特征与目标值相关性 变量特征相关性 3 数据预处理 目标变量正态分布化 异常值处理 缺失值处理 转换特征 保存训练集和测试集 4 …

    人工智能 2023年6月12日
    087
  • 使用Tansformer分割三维腹部多器官–UNETR实战

    不会 transformer 没关系,本教程开箱即用。 Tina姐总算对transformer下手了,之前觉得难,因为刚开始学序列模型的时候就没学会。然后就一直排斥学transfo…

    人工智能 2023年6月23日
    0122
  • pandas中遍历dataframe的每一个元素

    假如有一个需求场景需要遍历一个csv或excel中的每一个元素,判断这个元素是否含有某个关键字 那么可以用python的pandas库来实现。 方法一: pandas的datafr…

    人工智能 2023年6月2日
    083
  • 【R语言】实验四 数据分析

    hospital-data 数据集 数据是关于一些医院的基础信息,数据包含13个字段,包含的字段分别为:供应商编号、医院名、地址 1、地址2、地址3、所处城市、所处州、邮编、所处乡…

    人工智能 2023年6月11日
    096
  • 【论文阅读】基于内容的科技文献大数据挖掘与应用

    科技文献是科技信息工作起源和发展的基础。传统的挖掘多是采用文献计量学方法,基于关键词、作者、作者机构、发表时间、分类号、出版物等结构化元数据,对文献集合的分布情况和发展趋势进行分析…

    人工智能 2023年7月17日
    063
  • C#:计算机视觉与OpenCV 的目标

    《学习OpenCV(中文版)》 作者:(美)布拉德斯基(Bradski,G.),(美)克勒(Kaehler,A.) 著出版社:清华大学出版社出版时间:2009年10月 ; 一、计算…

    人工智能 2023年6月22日
    0114
  • AI算法有哪些常见的类别

    智能算法分类 智能算法是指通过计算机技术实现智能功能的一种方法。在人工智能领域,有许多常见的智能算法,可以根据其特性和应用领域进行分类。 以下是几种常见的智能算法类别: 监督学习算…

    人工智能 2024年1月1日
    047
  • Keras深度学习实战(7)——卷积神经网络详解与实现

    Keras深度学习实战(7)——卷积神经网络详解与实现 * – 0. 前言 – 1. 传统神经网络的缺陷 – + 1.1 构建传统神经网络 + …

    人工智能 2023年6月16日
    0111
  • ORB-SLAM3笔记(编译、踩坑、论文、看代码)

    目前基于orb_slam想做的方向 提升动态建图精度 ( √东西Map就是上不去 KITTI有几个groundtruth官网下架了找不到而且 红外相机退化环境下的点线融合 数据集h…

    人工智能 2023年5月26日
    0119
  • 【pandas教程】索引操作

    选择、修改数据(单层索引) 推荐使用.at、.iat、.loc、.iloc 操作句法结果备注选择列df[col]Series基于列名(列的标签),返回Series用标签选择行df….

    人工智能 2023年7月7日
    089
  • 风控必学|肘部法与客户分群——客户画像中的聚类与特征画像分析

    客户聚类分析,在信贷圈子里,是一种很常见的数据挖掘场景,对于从事金融数据分析岗位的我们,也是需要必备掌握能力之一。无论是策略分析岗,还是数据建模岗,或者是数据分析岗,客户样本的分群…

    人工智能 2023年5月31日
    085
  • 【Complex-YOLO: 点云实时目标检测】

    Complex-YOLO: 点云实时目标检测 前言 要点分析 具体算法分析 * 点云转化鸟瞰图 提取特征 B- Box损失回归 前言 Complex-YOLO,论文中介绍是一种仅在…

    人工智能 2023年7月9日
    0136
  • 人工智能:语音识别技术介绍

    今天给大家介绍一下关于语音识别相关的知识,希望对大家有所帮助! 1、什么是语音 语音指的是人类通过发声器官发出来具有一定意义、用来沟通交流的声音。 计算机中语音存储:以波形文件的方…

    人工智能 2023年7月30日
    081
  • 神经网络整体架构及细节(详细简单)

    前言: 神经网络的来源已经有大部分博主有详细的讲过了,但我发现整体框架中的细节很多博主都是大体讲了讲,所以作者今天想来好好详细的讲讲框架中的细节。 一:神经网络构架大体介绍 如下图…

    人工智能 2023年6月16日
    0100
  • 【机器学习】几种常见的无监督学习算法

    1. PCA 降维是指在保留数据特征的前提下,以少量的变量表示有许多变量的数据,这有助于降低多变量数据分析的复杂度。减少数据变量的方法有两种:一种是只选择重要的变量,不使用其余变量…

    人工智能 2023年6月19日
    0191
  • 面板数据熵值法-Python

    面板数据数据熵值法公式-基于Python 更新时间:2022年11月9日更新内容:已解决运行代码时出现下述问题: ; 一、理论基础 本文通过王晓红等(2021)中所使用到的面板数据…

    人工智能 2023年7月6日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球