echart实现简易拓扑

本文介绍如何使用ECharts在网页中创建动态箭头效果,通过设置箭头符号、颜色及动态移动参数,实现数据间的连接展示。

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

箭头是可以动的

 代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>业务归档拓扑</title>
    <!-- 引入 echarts.js -->
    <script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
</head>
<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="width: 600px;height:400px;"></div>
<script type="text/javascript">
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('main'));

    var nodes = [
	{
        x: '0',
        y: '12',
        name: 'A端网点名称',
        img: '3.png'
    },
	{
        x: '4',
        y: '12',
        name: '设备名称1',
        img: '4.png'
    },
    {
        x: '8',
        y: '12',
        name: '光交名称1',
        img: '4.png'
    },
    {
        x: '12',
        y: '12',
        name: '光交名称2',
        img: '4.png'
    },
    {
        x: '12',
        y: '6',
        name: '设备名称2',
        img: '4.png'
    },
    {
        x: '8',
        y: '6',
        name: 'UNT网络',
        img: '4.png'
    },
    {
        x: '4',
        y: '6',
        name: '设备名称3',
        img: '4.png'
    },
    {
        x: '0',
        y: '6',
        name: '光交名称3',
        img: '4.png'
    },
    {
        x: '0',
        y: '0',
        name: '光交名称4',
        img: '4.png'
    },
    {
        x: '4',
        y: '0',
        name: '设备名称4',
        img: '4.png'
    },
    {
        x: '8',
        y: '0',
        name: 'Z端网点名称',
        img: '4.png'
    }
]
var links = [
    {
        source: 'A端网点名称',
        target: '设备名称1'
    },
	{
        source: '设备名称1',
        target: '光交名称1'
    },
    {
        source: '光交名称1',
        target: '光交名称2'
    },
    {
        source: '光交名称2',
        target: '设备名称2'
    },
    {
        source: '设备名称2',
        target: 'UNT网络'
    },
    {
        source: 'UNT网络',
        target: '设备名称3'
    },
    {
        source: '设备名称3',
        target: '光交名称3'
    },
    {
        source: '光交名称3',
        target: '光交名称4'
    },
    {
        source: '光交名称4',
        target: '设备名称4'
    },
    {
        source: '设备名称4',
        target: 'Z端网点名称'
    }
]
var charts = {
    nodes: [],
    links: [],
    linesData: []
}
var dataMap = new Map()
for (var j = 0; j < nodes.length; j++) {
    var x = parseInt(nodes[j].x)
    var y = parseInt(nodes[j].y)
    var node = {
        name: nodes[j].name,
        value: [x, y],
        symbolSize: 50,
        symbol: 'image:///Users/huhub/Desktop/tuopudemo/img/' + nodes[j].img,
		//symbol: 'image://img/' + nodes[j].img,
        itemStyle: {
            normal: {
                color: '#12b5d0',
            }
        }
    }
    dataMap.set(nodes[j].name, [x, y])
    charts.nodes.push(node)
}
for (var i = 0; i < links.length; i++) {
    var link = {
        source: links[i].source,
        target: links[i].target,
        label: {
            normal: {
                show: false
            }
        },
        lineStyle: {
            normal: {
                color: '#00FFFF'
            }
        }
    }
    charts.links.push(link)
    // 组装动态移动的效果数据
    var lines = [{
        coord: dataMap.get(links[i].source)
    }, {
        coord: dataMap.get(links[i].target)
    }]
    charts.linesData.push(lines)
}
option = {
    title: {
        text: '',
        textStyle: {
            fontWeight: 'normal',
            color: "#00FFFF",
        }
    },
    backgroundColor: "#1b2735",
    xAxis: {
        show: false,
        type: 'value'
    },
    yAxis: {
        show: false,
        type: 'value'
    },
    series: [{
        type: 'graph',
        layout: 'none',
        coordinateSystem: 'cartesian2d',
        symbolSize: 50,
        label: {
            normal: {
                show: true,
                position: 'bottom',
                color: '#00FFFF'
            }
        },
        lineStyle: {
            normal: {
                width: 2,
                shadowColor: 'none'
            }
        },
        edgeSymbolSize: 8,
        data: charts.nodes,
        links: charts.links,
        itemStyle: {
            normal: {
                label: {
                    show: true,
                    formatter: function(item) {
                        return item.data.name
                    }
                }
            }
        }
    }, {
        name: 'A',
        type: 'lines',
        coordinateSystem: 'cartesian2d',
        effect: {
            show: true,
            trailLength: 0,
            symbol: 'arrow',
            color: '#00FFFF',
            symbolSize: 8
        },
        data: charts.linesData
    }]
};
myChart.setOption(option)
</script>
</body>
</html>

图片可以自定义

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值