血翼残飞

导航

d3.js

鼠标悬停:/  点击点触发点击事件

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/d3.min.js"></script>
<title></title>
<style>
.axis path, .axis line {
    fill: gray;
}

.axis text {
    font-family: sans-serif;
    font-size: 0px;
}
</style>
</head>
<body>
    <%
        //图形概览 转json数据
        private JSONArray xmjysJson;
        private JSONArray kxxyjbgpfJson;
        private JSONArray xmydhcbsjJson;
        private JSONArray jsgcghxkJson;
        private JSONArray jsgcsgxkJson;
        xmjysJson = JSONArray.fromObject(xmjys);
        kxxyjbgpfJson = JSONArray.fromObject(kxxyjbgpf);
        xmydhcbsjJson = JSONArray.fromObject(xmydhcbsj);
        jsgcghxkJson = JSONArray.fromObject(jsgcghxk);
        jsgcsgxkJson = JSONArray.fromObject(jsgcsgxk);
    %>
    <svg width="780" height="450"></svg>
    <script>
        var padding = {
            top : 60,
            bottom : 110,
            left : 60,
            right : 60
        }
    var xmjysJson = eval('${xmjysJson}');
    var kxxyjbgJson = eval('${kxxyjbgJson}');
    var xmydysJson = eval('${xmydysJson}');
    var cbsjJson = eval('${cbsjJson}');
    var gcghxkJson = eval('${gcghxkJson}');
    var gcsgxkJson = eval('${gcsgxkJson}');
    var gcssJson = eval('${gcssJson}');
    var gcwgJson = eval('${gcwgJson}');

    var date = [];
    var xdataset = [];
    var ydataset = [];
    if (xmjysJson.length>0){
        for (i = 0; i < xmjysJson.length; i++) {
            var xmjys = {
                x: "项目建议书批复阶段",
                y: i + 1,
                docName: xmjysJson[i].docName,
                extPrjDocId: xmjysJson[i].extPrjDocId,
                attachCount: xmjysJson[i].attachCount,
                documentTemplate:xmjysJson[i].documentTemplate
            }
            date.push(xmjys);
        }
        xdataset.push("项目建议书批复阶段");
        ydataset.push(xmjysJson.length + 1)
    }
    if (kxxyjbgJson.length>0){
        for (i = 0; i < kxxyjbgJson.length; i++) {
            var kxxyjbg = {
                x: "可行性研究报告阶段",
                y: i + 1,
                docName: kxxyjbgJson[i].docName,
                extPrjDocId: kxxyjbgJson[i].extPrjDocId,
                attachCount: kxxyjbgJson[i].attachCount,
                documentTemplate:kxxyjbgJson[i].documentTemplate
            }
            date.push(kxxyjbg);
        }
        xdataset.push("可行性研究报告阶段");
        ydataset.push(kxxyjbgJson.length + 1)
    }
    if (xmydysJson.length>0){
        for (i = 0; i < xmydysJson.length; i++) {
            var xmydys = {
                x: "项目用地预审",
                y: i + 1,
                docName: xmydysJson[i].docName,
                extPrjDocId: xmydysJson[i].extPrjDocId,
                attachCount: xmydysJson[i].attachCount,
                documentTemplate:xmydysJson[i].documentTemplate
            }
            date.push(xmydys);
        }
        xdataset.push("项目用地预审");
        ydataset.push(xmydysJson.length + 1)
    }
    if (cbsjJson.length>0){
        for (i = 0; i < cbsjJson.length; i++) {
            var cbsj = {
                x: "初步设计阶段",
                y: i + 1,
                docName: cbsjJson[i].docName,
                extPrjDocId: cbsjJson[i].extPrjDocId,
                attachCount: cbsjJson[i].attachCount,
                documentTemplate:cbsjJson[i].documentTemplate
            }
            date.push(cbsj);
        }
        xdataset.push("初步设计阶段");
        ydataset.push(cbsjJson.length + 1)
    }
    if (gcghxkJson.length>0){
        for (i = 0; i < gcghxkJson.length; i++) {
            var gcghxk = {
                x: "工程规划许可阶段",
                y: i + 1,
                docName: gcghxkJson[i].docName,
                extPrjDocId: gcghxkJson[i].extPrjDocId,
                attachCount: gcghxkJson[i].attachCount,
                documentTemplate:gcghxkJson[i].documentTemplate
            }
            date.push(gcghxk);
        }
        xdataset.push("工程规划许可阶段");
        ydataset.push(gcghxkJson.length + 1)
    }
    if (gcsgxkJson.length>0){
        for (i = 0; i < gcsgxkJson.length; i++) {
            var gcsgxk = {
                x: "工程施工许可阶段",
                y: i + 1,
                docName: gcsgxkJson[i].docName,
                extPrjDocId: gcsgxkJson[i].extPrjDocId,
                attachCount: gcsgxkJson[i].attachCount,
                documentTemplate:gcsgxkJson[i].documentTemplate
            }
            date.push(gcsgxk);
        }
        xdataset.push("工程施工许可阶段");
        ydataset.push(gcsgxkJson.length + 1)
    }
    if (gcssJson.length>0){
        for (i = 0; i < gcssJson.length; i++) {
            var gcss = {
                x: "工程实施阶段",
                y: i + 1,
                docName: gcssJson[i].docName,
                extPrjDocId: gcssJson[i].extPrjDocId,
                attachCount: gcssJson[i].attachCount,
                documentTemplate:gcssJson[i].documentTemplate
            }
            date.push(gcss);
        }
        xdataset.push("工程实施阶段");
        ydataset.push(gcssJson.length + 1)
    }
    if (gcwgJson.length>0){
        for (i = 0; i < gcwgJson.length; i++) {
            var gcwg = {
                x: "工程完工阶段",
                y: i + 1,
                docName: gcwgJson[i].docName,
                extPrjDocId: gcwgJson[i].extPrjDocId,
                attachCount: gcwgJson[i].attachCount,
                documentTemplate:gcwgJson[i].documentTemplate
            }
            date.push(gcwg);
        }
        xdataset.push("工程完工阶段");
        ydataset.push(gcwgJson.length + 1)
    }
    var dataset = {
        x: xdataset,
        y: ydataset
    };

    var svg = d3.select("svg");
    var width = svg.attr("width");
    var height = svg.attr("height");
    var main = svg.append('g').attr('transform', "translate(" + padding.top + ',' + padding.left + ')');

    //绘制比列尺
    //线性比列尺
    var xscale = d3.scale.ordinal().domain(dataset.x)
        .rangeRoundBands([0, width - padding.left - padding.right], 0, 0);
    //序数比列尺
    var yscale = d3.scale.linear()
        .domain([0, d3.max(dataset.y)])
        .range([height - padding.top - padding.bottom, 0]);
    //分别在x方向和y方向绘制坐标轴
    var xAxis = d3.svg.axis().scale(xscale).orient('bottom');
    var yAxis = d3.svg.axis().scale(yscale).orient('left');

    //设置x轴 字体旋转显示
    main.append('g').attr('class', 'axis').attr('transform', 'translate(0,' + (height - padding.top - padding.bottom) + ')')
        .call(xAxis).selectAll("text")
        .style("font-size", "14px")
        .style("text-anchor", "start")
        .attr("transform", "rotate(45 -10 10)");
    main.append('g').attr('class', 'axis').call(yAxis);

    //矩形之间的间隙
    var rectMargin = (width - padding.left - padding.right)/xdataset.length/2;
    console.log('==========rectMargin================'+rectMargin);
    // 添加矩形
    main.selectAll('.bar')
        .data(dataset.y)
        .enter().append("g")
        .append('rect')
        .attr('class', 'bar')
        .attr('x', function (d, i) {
            var b = xscale(dataset.x[i])+rectMargin-5;
            return b;
        })
        .attr('y', function (d, i) {
            return yscale(d);
        })
        /*.attr('width', xscale.rangeBand() - 2 * rectMargin)*/
        .attr('width', 10)
        .attr('height', function (d, i) {
            return height - padding.top - padding.bottom - yscale(d);
        })
        .attr("fill", "gray");

    //文字提示
    var tooltip = svg.append('text')
        .style('visibility', 'hidden')   // 是否可见(一开始设置为隐藏)
        .style('font-size', '14px')
        .style('font-weight', 'bold')
        .text('');

    // 添加点
    main.selectAll('circle')
        .data(date)
        .enter().append("g")
        .append('ellipse')
        .attr("cx", function (d) {
            return xscale(d.x) + rectMargin;
        })
        .attr("cy", function (d) {
            return yscale(d.y);
        })
        .attr("rx", 30)
        .attr("ry", 15)
        .attr("fill", function (d, i) {
            if (d.attachCount == '1' || d.attachCount == '3' ) {
                return "gray";
            }
            return "red";
        })
        .on("mouseover", function (d, i) {
            return tooltip.style('visibility', 'visible').text(d.docName).attr("x", xscale(d.x) + rectMargin).attr("y", yscale(d.y) + 40);
        })
        .on("mouseout", function (d, i) {
            return tooltip.style('visibility', 'hidden').text('');
        })
        .on("click", function (d, i) {
            window.location.href = "toEditDocKeyInfo.action?editType=update&&extPrjDocId=" + d.extPrjDocId+"&&documentTemplate="+d.documentTemplate;
        });

        
    </script>
</body>
</html>

 

posted on 2019-05-20 10:09  血翼残飞  阅读(215)  评论(0编辑  收藏  举报