【工具推荐】使用D3.js制作网页版网络拓扑图,可拖转可跳转链接

这篇具有很好参考价值的文章主要介绍了【工具推荐】使用D3.js制作网页版网络拓扑图,可拖转可跳转链接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、有哪些工具可以生成带链接的网络拓扑图

有一些 JavaScript 库可以帮助你创建网络拓扑图,并且支持将每个节点作为超链接。

以下是一些我推荐的库:

  1. D3.js:D3 是一个非常强大的 JavaScript 库,用于创建数据驱动的文档。你可以使用它来创建复杂的网络拓扑图,并且可以轻松地将每个节点作为超链接。
  2. Cytoscape.js:Cytoscape.js 是一个开源的图形理论库,允许你在网页上可视化复杂网络。它支持多种图形布局,并且可以将节点作为超链接。
  3. Vis.js:Vis.js 是一个动态、基于浏览器的可视化库。它的网络模块可以用于创建网络拓扑图,并且支持将节点作为超链接。
  4. Sigma.js:Sigma 是一个专注于图形绘制的 JavaScript 库,它使得在网页或者图形上展示网络变得简单。你可以将每个节点作为超链接。
  5. GoJS:GoJS 是一个用于构建交互式图表和图形的 JavaScript 库,包括网络拓扑图。你可以轻松地将每个节点作为超链接。

二、推荐使用D3.js

为什么我推荐使用D3.js呢?因为一个库比较看重的是它在开源项目中的数据,毕竟使用的人越多,它的功能就会越有动力做优化。

D3.js 是一个 JavaScript 库,用于基于数据操作文档。D3 可帮助您使用 HTML、SVG 和 CSS 使数据栩栩如生。D3 对 Web 标准的强调为您提供了现代浏览器的全部功能,而无需将自己绑定到专有框架,将强大的可视化组件和数据驱动的 DOM 操作方法相结合。

D3 允许您将任意数据绑定到文档对象模型 (DOM),然后将数据驱动的转换应用于文档。例如,可以使用 D3 从数字数组生成 HTML 表。或者,使用相同的数据创建具有平滑过渡和交互的交互式 SVG 条形图。

D3 不是一个寻求提供所有可能功能的整体框架。相反,D3 解决了问题的症结:基于数据高效操作文档。这避免了专有表示,并提供了非凡的灵活性,公开了 HTML、SVG 和 CSS 等 Web 标准的全部功能。D3 开销最小,速度极快,支持大型数据集以及交互和动画的动态行为。D3 的函数式风格允许通过各种官方和社区开发的模块重用代码。

根据 npm trends 的数据,以下是这些库的使用情况:

  • D3.js:每周下载次数约为 2,061,216 次,GitHub 上的星星数量为 105,494。
  • Cytoscape.js:每周下载次数约为 247,239 次,GitHub 上的星星数量为 9,126。
  • GoJS:每周下载次数约为 39,263 次,GitHub 上的星星数量为 6,908。
  • Sigma.js:每周下载次数约为 7,278 次,GitHub 上的星星数量未知。
  • Vis.js:每周下载次数约为 24 次,GitHub 上的星星数量为 2。

从这些数据来看,D3.js 是使用人数最多的库,其次是 Cytoscape.js 和 GoJS。Sigma.js 和 Vis.js 的使用人数相对较少。

【工具推荐】使用D3.js制作网页版网络拓扑图,可拖转可跳转链接

三、写个 demo吧

我使用D3.js写了一个 demo,实现了基本都节点连接和超链接功能,源码如下。

<!DOCTYPE html>
<html>
<head>
    <title>D3.js Network Topology Demo</title>
    <script src="https://d3js.org/d3.v7.min.js"></script>
</head>
<body>
    <script>
        // 创建 SVG 元素
        var svg = d3.select("body")
                    .append("svg")
                    .attr("width", 800)
                    .attr("height", 600);

        // 定义节点和链接的数据
        var nodes = [
            {id: "Router", url: "https://www.example1.com"},
            {id: "Switch", url: "https://www.example2.com"},
            {id: "Host 1", url: "https://www.example3.com"},
            {id: "Host 2", url: "https://www.example4.com"},
            {id: "Host 3", url: "https://www.example5.com"}
        ];

        var links = [
            {source: nodes[0], target: nodes[1]},
            {source: nodes[1], target: nodes[2]},
            {source: nodes[1], target: nodes[3]},
            {source: nodes[1], target: nodes[4]}
        ];

        // 创建力导向图
        var simulation = d3.forceSimulation(nodes)
                           .force("link", d3.forceLink(links).distance(200))
                           .force("charge", d3.forceManyBody().strength(-400))
                           .force("center", d3.forceCenter(400, 300));

        // 创建链接
        var link = svg.append("g")
                      .selectAll("line")
                      .data(links)
                      .join("line")
                      .attr("stroke", "#999")
                      .attr("stroke-opacity", 0.6);

        // 创建节点
        var node = svg.append("g")
                      .selectAll("a")
                      .data(nodes)
                      .join("a")
                      .attr("xlink:href", d => d.url)
                      .attr("target", "_blank")
                      .call(drag(simulation));

        node.append("circle")
            .attr("r", 20)
            .attr("fill", "#69b3a2");

        node.append("text")
            .attr("dy", "0.35em")
            .attr("x", 25)
            .text(d => d.id);

        // 更新力导向图
        simulation.on("tick", () => {
            link.attr("x1", d => d.source.x)
                .attr("y1", d => d.source.y)
                .attr("x2", d => d.target.x)
                .attr("y2", d => d.target.y);

            node.attr("transform", d => `translate(${d.x},${d.y})`);
        });

        // 定义拖拽行为
        function drag(simulation) {
            function dragstarted(event) {
                if (!event.active) simulation.alphaTarget(0.3).restart();
                event.subject.fx = event.subject.x;
                event.subject.fy = event.subject.y;
            }

            function dragged(event) {
                event.subject.fx = event.x;
                event.subject.fy = event.y;
            }

            function dragended(event) {
                if (!event.active) simulation.alphaTarget(0);
                event.subject.fx = null;
                event.subjectfy = null;
            }

            return d3.drag()
                     .on("start", dragstarted)
                     .on("drag", dragged)
                     .on("end", dragended);
        }
    </script>
</body>
</html>

实际运行结果如下。

【工具推荐】使用D3.js制作网页版网络拓扑图,可拖转可跳转链接

四、d3.js相关学习资料

1.官方网站

https://d3js.org/

【工具推荐】使用D3.js制作网页版网络拓扑图,可拖转可跳转链接

2.D3.js 教程

https://www.tutorialsteacher.com/d3js

【工具推荐】使用D3.js制作网页版网络拓扑图,可拖转可跳转链接

3.D3.js 教程

https://www.tutorialspoint.com/d3js/index.htm

【工具推荐】使用D3.js制作网页版网络拓扑图,可拖转可跳转链接文章来源地址https://www.toymoban.com/news/detail-468350.html

到了这里,关于【工具推荐】使用D3.js制作网页版网络拓扑图,可拖转可跳转链接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用前端绘图库(D3.js、Chart.js等)?

    聚沙成塔·每天进步一点点 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而

    2024年02月08日
    浏览(29)
  • 中秋之美——html+css+js制作中秋网页

    八月十五,秋已过半,是为中秋。 “但愿人长久,千里共婵娟”,中秋时节,气温已凉未寒,天高气爽,月朗中天,正是观赏月亮的最佳时令。古人把圆月视为团圆的象征,因此,又称八月十五为“团圆节”。 在这个团圆夜,每个人心中都寄托着美好的祝愿,回顾自己往日

    2024年02月07日
    浏览(36)
  • 网页轮播图制作(html+css+js)

            目的:用于自己做记录,记录制作的过程以及遇到的一些问题。内容参考来自b站的up主:黑马前端 的pink老师JavaScript基础语法课程。 (1)当鼠标经过轮播图,左右两边的按钮出现,离开则隐藏按钮; (2)点击左侧按钮,图片向右播放一张,以此类推,右侧同理;

    2024年02月08日
    浏览(36)
  • 大学生网页设计制作作业实例代码 (全网最全,建议收藏) HTML+CSS+JS

    临近期末,大一新生的各种考试和专业结课作业纷至沓来。web实训大作业、网页期末作业、web课程与设计、网页设计等,简直让人头大。你还在为网页设计老师的作业要求感到头大?网页作业无从下手?网页要求的总数量太多?没有合适的模板?等等一系列问题。你想要解决

    2024年02月03日
    浏览(55)
  • 怎么制作ai图片美女壁纸?快码住这篇ai绘画工具软件推荐合集

    用了ai制作的美女图片当壁纸,被朋友逼问了一下午! 近来这段时间迷上了ai绘画,挑了一张比较满意的生成图当壁纸,无意间被朋友看到还以为我背着他们偷偷脱单了,盘问了我一下午。 下面这几张图片都是我用ai绘画软件生成的,很不错吧? 看完大家是不是想问是这些图

    2024年02月16日
    浏览(43)
  • 【网络架构】华为hw交换机网络高可用网络架构拓扑图以及配置

     本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ce

    2024年02月12日
    浏览(25)
  • 快速读懂网络拓扑图

    简介 总线型拓扑是采用单根传输作为共用的传输介质,将网络中所有的计算机通过相应的硬件接口和电缆直接连接到这根共享的总线上。使用总线型拓扑结构需解决的是确保端用户使用媒体发送数据时不能出现冲突。 优点 (1)网络结构简单,易于网络扩展; (2)设备少、造

    2024年02月07日
    浏览(46)
  • 医院网络设计(完整文档+思科拓扑图)

    大家好,我是小华学长,一名计算机领域的博主。经过多年的学习和实践,我积累了丰富的计算机知识和经验,在这里我想与大家分享我的学习心得和技巧,帮助你成为更好的程序员。 作为一名计算机博主,我一直专注于编程、算法、软件开发等领域,在这些方面积累了大量

    2024年02月07日
    浏览(33)
  • 制作一个简单HTML旅游网站(HTML+CSS+JS)无锡旅游网页设计与实现8个页面

    👨‍🎓静态网站的编写主要是用 HTML DⅣV+ CSSJS等来完成页面的排版设计👩‍🎓,一般的网页作业需要融入以下知识点:div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉导航栏、鼠标划过效果等知识点,学生网页作业源码,制作水平

    2024年02月10日
    浏览(41)
  • threejs 3d网络设备拓扑图绘制示例

    技能点:threejs,Vue,canvas,几何数学。 展示网站:http://jstopo.top 模型上方图标贴图 canvas文字贴图

    2024年02月15日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包