前端vue uni-app使用Vue和ECharts构建交互式树形结构图

题目:使用Vue和ECharts构建交互式树形结构图

摘要:本文介绍了如何使用Vue.js和ECharts构建一个交互式的树形结构图。通过整合ECharts的强大可视化功能,我们创建了一个可拖拽移动、点击展开和收缩的树形结构图,并实现了无限添加子集的功能。

图片

一、引言

随着数据可视化的快速发展,树形结构图作为一种常用的数据展示方式,被广泛应用于展示层次结构、关系网络和数据分类等场景。特别是在Web前端开发中,使用Vue.js等前端框架结合ECharts等可视化库,可以轻松实现树形结构图的交互式展示。

二、技术选型

  1. Vue.js:Vue.js是一款流行的前端框架,用于构建用户界面。它采用组件化的方式组织代码,使得前端开发更加模块化和可维护。

  2. ECharts:ECharts是一款使用JavaScript实现的开源可视化库,提供了丰富的图表类型和强大的交互功能。它能够方便地与Vue.js集成,实现数据驱动的可视化。

三、实现过程

  1. 安装依赖:首先,确保你的项目中已经安装了Vue.js和ECharts。你可以通过npm或yarn进行安装。例如,使用以下命令安装ECharts:

 

shell复制代码

npm install echarts --save
  1. 创建Vue组件:在Vue项目中,创建一个新的Vue组件用于承载树形结构图。在该组件的模板中,添加一个div元素作为ECharts图表的容器,并为其指定一个唯一的ID。

  2. 初始化图表:在Vue组件的mounted钩子函数中,初始化ECharts图表。首先获取容器的DOM元素,然后使用ECharts的init方法创建一个图表实例。接着,定义图表的配置项和数据。

  3. 配置树形图:在ECharts的配置项中,使用series属性配置树形图的数据。指定series的类型为"tree",并设置相应的数据和选项。例如,设置节点名称、颜色、子节点等。

  4. 实现交互功能:为了使树形图具有交互性,你可以使用ECharts提供的事件处理函数。例如,监听"click"事件来处理节点点击事件,实现展开或收缩节点的功能。同时,也可以监听"drag"事件来实现节点的拖拽移动功能。

  5. 无限添加子集:为了支持无限添加子集的功能,你可以在用户点击节点时动态生成新的子节点,并将其添加到树形图的数据中。然后重新渲染图表以显示新添加的子节点。

    实现代码如下:

    HTML代码部分
    复制代码<template>
        <view class="content">
    
            <view class="titleIos"></view>
    
            <div class="mui-content" style="margin-top: 16px;">
    
                <div id="container" style="height: 86vh; margin-top: 0px;"></div>
    
            </div>
    
        </view>
    </template>
    
    JS代码 (引入组件 填充数据)
    复制代码
    <script>
        import echarts from '../../static/h5/echarts.min.js'
    
        export default {
            data() {
                return {
    
                }
            },
            onReady() {
    
            },
            onLoad: function(e) {
                console.log(e);
    
            },
            onShow() {
    
            },
            mounted() {
                this.treeData()
            },
    
            methods: {
                treeData() {
    
                    var dom = document.getElementById("container");
                    var myChart = echarts.init(dom);
    
                    //  颜色设定 不同颜色寓意不同权重
                    var fatherColor = 'green';
                    var midColor = 'rgb(193, 92, 31)';
                    var smallColor = 'rgb(247, 203, 174)';
    
                    var option;
    
                    // 新能源汽车
                    let swyyQ = {
                        "name": "新能源汽车",
                        itemStyle: {
                            color: midColor
                        },
                        "children": [{
                                "name": "大型企业",
                                itemStyle: {
                                    color: fatherColor
                                },
    
                            },
                            {
                                "name": "中型企业",
                                itemStyle: {
                                    color: midColor
                                },
    
                            },
                            {
                                "name": "小型企业",
                                itemStyle: {
                                    color: smallColor
                                },
    
                            },
                            {
                                "name": "其他规模企业",
                                itemStyle: {
                                    color: fatherColor
                                },
                            }
                        ]
                    };
    
                    // 新材料行业
                    let xclkQ = {
                        "name": "生物与新医药",
                        itemStyle: {
                            color: fatherColor
                        },
                        "children": [{
                                "name": "大型企业",
                                itemStyle: {
                                    color: fatherColor
                                },
    
                            },
                            {
                                "name": "中型企业",
                                itemStyle: {
                                    color: midColor
                                },
    
                            },
                            {
                                "name": "小型企业",
                                itemStyle: {
                                    color: smallColor
                                },
    
                            },
                            {
                                "name": "其他规模企业",
                                itemStyle: {
                                    color: fatherColor
                                },
                            }
                        ]
                    };;
    
                    let data = {
                        "name": "行业分类",
                        itemStyle: {
                            color: fatherColor
                        },
                        "children": [swyyQ, xclkQ]
    
                    }
                    // 获取网页宽度 设置树形条目实体宽高度
                    let width = document.body.scrollWidth;
                    let widthSize = 0.039 * width;
                    if (widthSize > 36) {
                        widthSize = 36;
                    }
                    let heightSize = widthSize * 2.2;
    
                    myChart.setOption(
                        (option = {
                            tooltip: {
                                trigger: 'item',
                                triggerOn: 'mousemove'
                            },
                            series: [{
                                type: 'tree',
                                data: [data],
                                left: '2%',
                                right: '2%',
                                top: '8%',
                                bottom: '20%',
                                symbol: 'square',
                                symbolSize: [widthSize, heightSize],
                                orient: 'vertical',
                                expandAndCollapse: true,
                                initialTreeDepth: 2,
    
                                label: {
                                    position: 'top',
                                    rotate: 0,
                                    verticalAlign: 'middle',
                                    align: 'center',
                                    fontSize: 12
                                },
                                leaves: {
                                    label: {
                                        position: 'bottom',
                                        rotate: -90,
                                        verticalAlign: 'middle',
                                        align: 'left'
                                    }
                                },
                                animationDurationUpdate: 150
                            }]
                        })
                    );
    
                    if (option && typeof option === 'object') {
                        myChart.setOption(option);
                    }
    
                },
    
            }
    
        }
    </script>
    
    CSS
    复制代码
    <style>
        .content {
            display: flex;
            flex-direction: column;
    
        }
    </style>
    

四、注意事项

  1. 数据驱动:由于树形图的数据是动态的,因此需要确保数据的有效性和准确性。在添加或更新节点时,要确保数据的层次结构和关系正确。

  2. 性能优化:由于树形图的数据量可能很大,因此需要注意性能优化。可以通过使用虚拟化技术来减少不必要的渲染和计算,提高图表渲染的效率。

  3. 可读性和用户体验:在设计树形图时,要注意图表的排版和布局,使得图表易于理解和操作。同时,根据实际需求调整颜色、字体等样式,以提高用户体验。

五、总结

通过整合Vue.js和ECharts,我们可以轻松地构建一个交互式的树形结构图。这种图表在展示层次结构和关系网络时非常有用,可以帮助用户更好地理解和分析数据。同时,利用Vue.js和ECharts的强大功能和灵活性,我们可以根据实际需求定制化图表的功能和样式,以满足各种场景的需求。

 阅读全文下载完整组件代码请关注微信公众号: 前端组件开发

d848d5658a07453c843277846948c608.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/281411.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ROS学习记录:用C++实现对wpr_simulation软件包中机器人的运动控制

一、在工作空间下输入catkin_make进行编译 二、在工作空间中输入source ./devel/setup.bash后回车 三、机器人的运动控制在wpr_simulation中有一个例子程序&#xff0c;在工作空间中输入&#xff1a; roslaunch wpr_simulation wpb_simple.launch后回车 四、就会启动一个仿真环…

计算机毕业设计 基于HTML5+CSS3的在线英语阅读分级平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

【Maven】下载及配置

文章目录 1. 定义2. 下载3. 解压4. 配置环境变量5. 验证6. 特性 1. 定义 Maven 是一个跨平台的项目管理工具。作为 Apache 组织的一个颇为成功的开源项目&#xff0c;其主要服务于基于 Java 平台的项目创建&#xff0c;依赖管理和项目信息管理&#xff0c;是一个自动化构建工具…

HTML---利用CSS3制作网页动画

文章目录 目录 文章目录 本章目标 一.CSS3概述 CSS函数概述 二.CSS3变形 transform属性 translate()&#xff1a;平移函数 scale()&#xff1a;缩放函数 rotate()&#xff1a;旋转函数 skew()&#xff1a;倾斜函数 三.CSS3过渡 四.CSS动画 练习 旋转按钮 本章目标 会使用…

AJAX: 整理2:学习原生的AJAX,这边借助express框架

1. npm install express 终端直接安装 2. 测试案例&#xff1a;Hello World&#xff01; 新建一个express.js的文件&#xff0c;写入下方的内容 // 1. 引入express const express require(express)// 2. 创建服务器 const app express()// 3.创建路由规则 // request 是对请…

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题)

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 第一部分&#xff1a;数据安全防护(30%) 第二部分&#xff1a;数据安全管理(30%) 第三部分&#xff1a;数据安全处置(40%) 项目介绍…

Python 中的 Iterable 和 Iterator(Iterable and Iterator in Python)

Python 中的 Iterable 和 Iterator(Iterable and Iterator in Python) 文章目录 Python 中的 Iterable 和 Iterator(Iterable and Iterator in Python)Introduction 导言Iterable VS Iterator为什么 Python 有这种特殊的设计special design?如何获取迭代器Iterator&#xff1f…

SpringCloud 和 Linux 八股文第三期五问五答

SpringCloud 和 Linux 八股文第三期五问五答 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;Linux常用命令 2&#xff09;如何查看测试项目的日志 一…

Docker (compose、安装、常用命令整理、compose编排) -day06

一、概念 Docker-Compose就是容器编排&#xff0c;负责实现对Docker容器集群的快速编排 Compose允许用户通过一个单独的docker-compose.yml模板文件&#xff08;YAML 格式&#xff09;来定义一组相关联的应用容器为一个项目&#xff08;project&#xff09;。 可以很容易地用一…

Python数值型字符串校验

从键盘输入一行字符串&#xff0c;编写Python代码判定字符串是python“合法”数值。 (笔记模板由python脚本于2023年12月25日 18:00:52创建&#xff0c;本篇笔记适合熟悉Python符串基本数据类型的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.py…

2023年终总结 —— 我和CSDN相遇的第一年之“技术学习和个人成长的回顾与展望”

​ ​ &#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 &#x1f38a;对2023的总结与回顾&#x1f38a; &#x1f3c5;获奖记录 &#x1f4da;学…

1、gdb基本功能

文章目录 1、gdb1.1、运行1.1.1、程序入参 1.2、断点及观察点1.2.1、设置断点1.2.2、禁用、删除断点1.2.3、观察点 1.3、打印1.3.1、设定打印参数1.3.2、打印数据1.3.3、自动打印1.3.4、按照地址打印 linux下我现在接触到的常用调试工具如下. gbdgdbguicmake-tools gdb是最为通…

SLAM学习入门--传统图像处理

文章目录 传统图像处理颜色空间高斯滤波腐蚀和膨胀开运算和闭运算如何求一张图片的均值&#xff1f;线性插值双线性插值仿射变换透视变换常见的边缘检测算子Sobel 算法Canny 算法Hough 变换原理&#xff08;直线和圆检测&#xff09;找轮廓&#xff08;findCountours&#xff0…

【网络安全 | Misc】Aesop_secret(ISCC)

正文 动态gif&#xff0c;使用工具进行分解&#xff1a; https://tu.sioe.cn/gj/fenjie/ 得到ISCC字样 由Winhex看到密文&#xff1a; U2FsdGVkX19QwGkcgD0fTjZxgijRzQOGbCWALh4sRDec2w6xsY/ux53Vuj/AMZBDJ87qyZL5kAf1fmAH4Oe13Iu435bfRBuZgHpnRjTBn5xsDHONiR3t0Oa8yG/tOKJMN…

故障诊断模型 | Maltab实现PSO-BP粒子群算法优化BP神经网络的故障诊断

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现PSO-BP粒子群算法优化BP神经网络的故障诊断 模型描述 在机器学习领域,我们常常需要通过训练数据来学习一个函数模型,以便在未知的数据上进行预测或分类。传统的神经网络模型需…

【大模型的前世今生】从自然语言处理说起

自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;被誉为人工智能皇冠上的明珠&#xff0c;是计算机科学和人工智能领域的一个重要方向。它主要研究人与计算机之间&#xff0c;使用自然语言进行有效通信的各种理论和方法。简单来说&#xf…

基于 CefSharp 实现一个文件小工具

I’m not saying you can’t be financially successful I’m saying have a greater purpose in life well beyond the pursuit of financial success Your soul is screaming for you to answer your true calling You can change today if you redefine what success is to …

网络安全—认证技术

文章目录 加密认证对称密钥体制公钥密码体制公钥的加密公钥身份认证和加密 鉴别码认证MAC鉴别码 报文摘要认证认证 加密只认证数字签名 通过了解以前前辈们使用的消息认证慢慢渐进到现代的完整的认证体系。所以在学习的时候也很蒙圈&#xff0c;因为前期的很多技术都是有很严重…

matplotlib单变量和双变量可视化

使用seaborn 库的tips数据集&#xff0c;其中包含了某餐厅服务员收集的顾客付小费的相关数据&#xff08;评论区&#xff09; 单变量可视化 直方图 直方图是观察单个变量最常用的方法。这些值是经过"装箱"&#xff08;bin&#xff09;处理的 直方图会将数据分组后绘…

Vlan的封装模式和端口讲解(Access、Trunk、Hypbrid端口)

目录 Vlan的封装模式 ISL协议 802.1Q协议 二层接口类型 Access接口 Trunk接口 Hybrid接口 不同Vlan之间的通信 Vlan的作用&#xff08;Vlan工作于OSI参考模型的第二层&#xff09; Vlan&#xff08;Virtual Local Area Network&#xff09;虚拟局域网&#xff0c;将一个…