java Struts + JQuery +d3.js 动态生成一个简单的拓扑图

本文介绍了如何使用Java、Struts、JQuery和d3.js库动态生成一个可拖拽的拓扑图。首先展示了最终效果,然后详细讲解了从定义数据模型(包括NodeLink、Link和Node类)、生成JSON数据到前端利用d3.js展示拓扑图的步骤。关键代码已给出,并对需要注意的部分进行了注释。
摘要由CSDN通过智能技术生成


先贴图,看效果



这个图形可拖拽,是用的d3.js前台控件,之前网友做的东西,稍稍改了下,准确的说也就是数据动态加载了,以前是前台写死的数据。

先把之前网友的代码贴出来

页面代码

</pre><pre name="code" class="javascript"><!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="d3.js"></script>
<style type="text/css">
.link { stroke: green; stroke-linejoin:bevel;}

.link_error{
    stroke:red;
    stroke-linejoin:bevel;
}

.nodetext {

    font: 12px sans-serif;
    -webkit-user-select:none;
    -moze-user-select:none;
    stroke-linejoin:bevel;
    
}

#container{
    width:800px;
    height:600px;
    border:1px solid gray;
    border-radius:5px;
    position:relative;
    margin:20px;
}
</style>
</head>
<body>
<div id='container'></div>
<script type="text/javascript">

function Topology(ele){
    typeof(ele)=='string' && (ele=document.getElementById(ele));
    var w=ele.clientWidth,
        h=ele.clientHeight,
        self=this;
    this.force = d3.layout.force().gravity(.05).distance(200).charge(-800).size([w, h]);
    this.nodes=this.force.nodes();
    this.links=this.force.links();
    this.clickFn=function(){};
    this.vis = d3.select(ele).append("svg:svg")
                 .attr("width", w).attr("height", h).attr("pointer-events", "all");

    this.force.on("tick", function(x) {
      self.vis.selectAll("g.node")
          .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });

      self.vis.selectAll("line.link")
          .attr("x1", function(d) { return d.source.x; })
          .attr("y1", function(d) { return d.source.y; })
          .attr("x2", function(d) { return d.target.x; })
          .attr("y2", function(d) { return d.target.y; });
    });
}


Topology.prototype.doZoom=function(){
    d3.select(this).select('g').attr("transform","translate(" + d3.event.translate + ")"+ " scale(" + d3.event.scale + ")");
}


//增加节点
Topology.prototype.addNode=function(node){
    this.nodes.push(node);
}

Topology.prototype.addNodes=function(nodes){
    if (Object.prototype.toString.call(nodes)=='[objec
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值