前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >echart拓扑图实现过程

echart拓扑图实现过程

作者头像
何处锦绣不灰堆
发布2021-01-21 19:00:14
2.8K0
发布2021-01-21 19:00:14
举报
文章被收录于专栏:农历七月廿一农历七月廿一
看效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

链接地址:官方地址echart 实现源码:

首先说一下,实现这个过程很简单,不过坑还是有一些的,今天主要就是说一下这些坑,上面的图是我实现的结果

代码语言:javascript
复制
let topology = res.data.items
                        let X = 200
                        let Y = 200
                        let dataSource = [{
							                name: '节点1',
							                x: 300,
							                y: 300
							            }, {
							                name: '节点2',
							                x: 800,
							                y: 300
							            }, {
							                name: '节点3',
							                x: 550,
							                y: 100
							            }, {
							                name: '节点4',
							                x: 550,
							                y: 500
							            }],
						let links = [{
							                source: 0,
							                target: 1,
							                symbolSize: [5, 20],
							                label: {
							                    show: true
							                },
							                lineStyle: {
							                    width: 5,
							                    curveness: 0.2
							                }
							            }, {
							                source: '节点2',
							                target: '节点1',
							                label: {
							                    show: true
							                },
							                lineStyle: {
							                    curveness: 0.2
							                }
							            }, {
							                source: '节点1',
							                target: '节点3'
							            }, {
							                source: '节点2',
							                target: '节点3'
							            }, {
							                source: '节点2',
							                target: '节点4'
							            }, {
							                source: '节点1',
							                target: '节点4'
							            }],

                        let option = {
                            title: {
                                text: this.title
                            },
                            tooltip: {
                                //show: true,
                                //enterable: true,//鼠标是否可进入提示框浮层中
                                formatter: formatterHover,//修改鼠标悬停显示的内容
                            },
                            legend: [{
                                data: dataSource.map(function (a) {
                                    return a.name;
                                })
                            }],
                            series: [
                                {
                                    type: 'graph',
                                    layout: 'none', //none' 不采用任何布局,使用节点中提供的 x, y 作为节点的位置.'circular' 采用环形布局,'force' 采用力引导布局。
                                    symbolSize: 50,
                                    //categories: dataSource, //是否显示图例
                                    focusNodeAdjacency: true,  //鼠标放置上去 显示当前的连接
                                    draggable: true, //是否支持拖拽   只有layout 为 force 的时候才可以用
                                    roam: true, //是否支持拖动和缩放
                                    animation: true, //是否需要加载
                                    animationDurationUpdate: 5000,//加载动画时间
                                    animationEasingUpdate: 'backIn',//动画类型
                                    label: {
                                        normal: {
                                            show: true,//是否显示标签。
                                            position: 'bottom',//标签的位置。['50%', '50%'] [x,y]   'inside'
                                            textStyle: { //标签的字体样式
                                                color: '#3489ff', //字体颜色
                                                fontStyle: 'normal',//文字字体的风格 'normal'标准 'italic'斜体 'oblique' 倾斜
                                                fontWeight: 'bolder',//'normal'标准'bold'粗的'bolder'更粗的'lighter'更细的或100 | 200 | 300 | 400...
                                                fontFamily: 'sans-serif', //文字的字体系列
                                                fontSize: 12, //字体大小
                                            }
                                        },
                                    },
                                    itemStyle: {
                                        borderColor: '#fff',
                                        borderWidth: 1,
                                        shadowBlur: 10,
                                        shadowColor: 'rgba(0, 0, 0, 0.3)'
                                    },
                                    edgeSymbol: ['none', 'arrow'],
                                    data: dataSource,
                                    links: links,
                                    lineStyle: {
                                        opacity: 0.9,
                                        width: 2,
                                        curveness: 0,
                                        color: '#000000'
                                    },
                                    emphasis: {
                                        lineStyle: {
                                            width: 6
                                        }
                                    }
                                }
                            ],
                            markPoint: {},
                        };
                        function formatterHover(params) {
                            let currData = params.data
                            if (params.dataType === 'node') {
                            //鼠标到节点
                                return currData.name
                            } else {
                            //鼠标到线条
                                return currData.name
                            }
                        }
                        currTopology.setOption(option)

注意的点1: 如果使用的是canvas进行绘制的,那么我们的tooltip不显示,解决方案是将canvas改为div就可以了

代码语言:javascript
复制
<!--<canvas width="1920" height="600" id="canvas"
                         style="background-color: #FFFFFF" ref="topology"></canvas>-->
<div id="canvas"
                         style="background-color: #FFFFFF;width:1920px ;height:600px" ref="topology"></div>

注意的点2: formatterHover 该函数需要写到我们的方法中,function定义,然后进行html的构建。

注意的点3:具体怎么引入的echart,我之前的博客中有写到,npm install就可以了。

具体说我一个月没有更新博客了,也没啥解释的了,都是我的问题,关于这个拓扑图实现过程中有什么问题,可以私信我,或者下面评论!看到了我都会回复的!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-01-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 看效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档