zoukankan      html  css  js  c++  java
  • H5 --力导向图、关系图谱

    //copy劝言:多研究没有坏处,随copy可直接使用,但建议研究一下;

    操作节点,添加自己想要的效果;

    例如:不要 颜色原点,更换图片;

    点击效果:隐藏显示,是否显示连线,连线颜色是否统一;

    <html>
    <head>
    <meta charset="utf-8">
    <title>力导向图</title>
    </head>

    <style>
    svg{
    height: 100%;
    100%;
    }

    </style>
    <body>
    <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
    <script>

    var nodes = [ { name: "桂林" }, { name: "广州" },
    { name: "厦门" }, { name: "杭州" },
    { name: "上海" }, { name: "青岛" },
    { name: "上海" }, { name: "青岛" },
    { name: "上海" }, { name: "青岛" },
    { name: "天津" } ];

    var edges = [ { source : 0 , target: 1 } , { source : 0 , target: 2 } ,
    { source : 2 , target: 6 } , { source : 2 , target: 7 } ,
    { source : 3 , target: 8 } , { source : 3 , target: 9 } ,
    { source : 0 , target: 3 } , { source : 1 , target: 4 } ,
    { source : 1 , target: 5 } , { source : 1 , target: 10 } ];

    var width = 1161;
    var height = 833;


    var svg = d3.select("body")
    .append("svg")
    .attr("width",width)
    .attr("height",height);

    var force = d3.layout.force()
    .nodes(nodes) //指定节点数组
    .links(edges) //指定连线数组
    .size([width,height]) //指定范围
    .linkDistance(150) //指定连线长度
    .charge(-400); //相互之间的作用力

    force.start(); //开始作用

    console.log(nodes);
    console.log(edges);

    //添加连线
    var svg_edges = svg.selectAll("line")
    .data(edges)
    .enter()
    .append("line")
    .style("stroke","#ccc")
    .style("stroke-width",1);

    var color = d3.scale.category20();

    //添加节点
    var svg_nodes = svg.selectAll("circle")
    .data(nodes)
    .enter()
    .append("circle")
    .attr("r",20)
    .style("fill",function(d,i){
    return color(i);
    })
    .call(force.drag); //使得节点能够拖动

    //添加描述节点的文字
    var svg_texts = svg.selectAll("text")
    .data(nodes)
    .enter()
    .append("text")
    .style("fill", "black")
    .attr("dx", 20)
    .attr("dy", 8)
    .text(function(d){
    return d.name;
    });

    force.on("tick", function(){ //对于每一个时间间隔

    //更新连线坐标
    svg_edges.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; });

    //更新节点坐标
    svg_nodes.attr("cx",function(d){ return d.x; })
    .attr("cy",function(d){ return d.y; });

    //更新文字坐标
    svg_texts.attr("x", function(d){ return d.x; })
    .attr("y", function(d){ return d.y; });
    });

    </script>

    </body>
    </html>

    //此为项目示例代码;喊部分操作

    // SVG 画图
    ////console.log("svg数据为:",svgData);
    var user ={name: "用户",imgUrl :'./img/icon/user.png'}, //用户
    bank ={ name: "银行卡",imgUrl :'./img/icon/bank.png'}, //银行卡
    phone ={name: "设备",imgUrl :'./img/icon/phone.png'}, //设备
    call = {name: "手机号",imgUrl :'./img/icon/call.png'}; //手机号
    var nodes = [{name: "用户",imgUrl :'./img/icon/user.png'}];
    // source 所属 指向 下标; target :目标
    /**
    * @ edges = [{
    * source: {name: "用户", imgUrl: "./img/icon/user.png", index: 0, weight: 5, x: 241.9645110438536, …}
    * target: {name: "用户", imgUrl: "./img/icon/user.png", index: 0, weight: 5, x: 241.9645110438536, …}
    * }]
    *
    */
    // var userEdges = {source : 0, target:0},
    // bankEdges = {source : 0, target:0},
    // phoneEdges = {source : 0, target:0},
    // callEdges = {source : 0, target:0},
    var edges = [{ source : 0, target:0}];
    // 循环 devices_list 获取手机设备数量
    var i = 0;
    newData.map(function(item,index){
    //console.log(item)
    nodes.push({name: item.device_name,imgUrl :'./img/icon/phone.png'});
    edges.push({ source : 0, target:index+1},)
    })
    nodes.push({name: "手机号",imgUrl :'./img/icon/call.png'});
    edges.push({ source : 0, target:edges.length},)
    var width = document.body.clientWidth;
    var height = 421;
    var img_w = 25;
    var img_h = 25;
    var radius = 20; //圆形半径

    var svg = d3.select(".force")
    .append("svg")
    .attr("width",width)
    .attr("height",height);
    var force = d3.layout.force()
    .nodes(nodes) //指定节点数组
    .links(edges) //指定连线数组
    .size([width,height]) //指定范围
    .linkDistance(50) //指定连线长度
    .charge(-400); //相互之间的作用力
    force.start(); //开始作用
    //console.log(nodes);
    //console.log(edges);
    //添加连线
    var svg_edges = svg.selectAll("line")
    .data(edges)
    .enter()
    .append("line")
    .style("stroke","#ccc")
    .style("stroke-width",1);
    var color = d3.scale.category20();
    //添加节点
    // var svg_nodes = svg.selectAll("circle")
    // .data(nodes)
    // .enter()
    // .append("circle")
    // .attr("r",20)
    // .style("fill",function(d,i){
    // return color(i);
    // })
    // .call(force.drag); //使得节点能够拖动
    // 添加描述节点的文字
    var svg_texts = svg.selectAll("text")
    .data(nodes)
    .enter()
    .append("text")
    .style("fill", "#fff")
    .style("font-size", "12px")
    .style("fill-opacity", 0)
    .attr("dx", 15)
    .attr("dy", 40)
    .text(function(d){
    return d.name;
    });
    // edges.map(function(item,index){
    // //console.log(item,index)
    // })
    //添加 图片节点
    var textShow = false;
    var svg_imgs = svg.selectAll("image")
    .data(nodes)
    .enter()
    .append("image")
    .attr("dx", 200)
    .attr("dy", -400)
    .attr("r", radius)
    .attr("width", img_w)
    .attr("height", img_h)
    .attr("xlink:href", function(edges){
    return edges.imgUrl;
    })
    .on("mousedown",function(d,i){
    //显示连接线上的文字
    textShow = !textShow
    svg_texts.style("fill-opacity",function(edges,ii){
    if(textShow){
    return 1.0;
    }else{
    return 0.0;
    }
    });
    })
    .call(force.drag); //使得节点能够拖动
    force.on("tick", function(){ //对于每一个时间间隔
    //更新连线坐标
    svg_edges.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; });
    //更新节点坐标
    // svg_nodes.attr("cx",function(d){ return d.x; })
    // .attr("cy",function(d){ return d.y; });
    // 更新图片
    // nodes_img.attr("cx",function(d){ return d.x });
    // nodes_img.attr("cy",function(d){ return d.y });
    // 更新文字坐标
    svg_texts.attr("x", function(d){ return d.x-30.5; })
    .attr("y", function(d){ return d.y-16; });
    //更新头像坐标
    svg_imgs.attr("x", function(d){ return d.x-12.5; })
    .attr("y", function(d){ return d.y-12; });
    });

    }

  • 相关阅读:
    包的初识与使用
    时间 随机 模块
    规范化开发
    解析Javascript事件冒泡机制
    Java垃圾回收机制
    Java 垃圾收集机制
    javac 编译与 JIT 编译
    JAVA对文件类型的校验
    多态性实现机制——静态分派与动态分派
    类加载机制
  • 原文地址:https://www.cnblogs.com/lipuqing180906/p/10313439.html
Copyright © 2011-2022 走看看