1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> 5 <link type="text/css" rel="stylesheet" href="style.css"/> 6 <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script> 7 <style type="text/css"> 8 9 body { 10 overflow: hidden; 11 margin: 0; 12 font-size: 14px; 13 font-family: "Helvetica Neue", Helvetica; 14 } 15 16 #chart, #header, #footer { 17 position: absolute; 18 top: 0; 19 } 20 21 #header, #footer { 22 z-index: 1; 23 display: block; 24 font-size: 36px; 25 font-weight: 300; 26 text-shadow: 0 1px 0 #fff; 27 } 28 29 #header.inverted, #footer.inverted { 30 color: #fff; 31 text-shadow: 0 1px 4px #000; 32 } 33 34 #header { 35 top: 80px; 36 left: 140px; 37 width: 1000px; 38 } 39 40 #footer { 41 top: 1080px; 42 right: 140px; 43 text-align: right; 44 } 45 46 rect { 47 fill: none; 48 pointer-events: all; 49 } 50 51 pre { 52 font-size: 18px; 53 } 54 55 line { 56 stroke: #000; 57 stroke-width: 1.5px; 58 } 59 60 .string, .regexp { 61 color: #f39; 62 } 63 64 .keyword { 65 color: #00c; 66 } 67 68 .comment { 69 color: #777; 70 font-style: oblique; 71 } 72 73 .number { 74 color: #369; 75 } 76 77 .class, .special { 78 color: #1181B8; 79 } 80 81 a:link, a:visited { 82 color: #000; 83 text-decoration: none; 84 } 85 86 a:hover { 87 color: #666; 88 } 89 90 .hint { 91 position: absolute; 92 right: 0; 93 width: 1280px; 94 font-size: 12px; 95 color: #999; 96 } 97 .chart { 98 display: block; 99 margin: auto; 100 margin-top: 60px; 101 font-size: 11px; 102 } 103 104 rect { 105 stroke: #eee; 106 fill: #aaa; 107 fill-opacity: .8; 108 } 109 110 rect.parent { 111 cursor: pointer; 112 fill: steelblue; 113 } 114 115 text { 116 pointer-events: none; 117 } 118 119 </style> 120 </head> 121 <body> 122 <div id="body"> 123 <div id="footer"> 124 $dllname 125 </div> 126 </div> 127 <script type="text/javascript"> 128 129 var w = 1120, 130 h = 1000, 131 x = d3.scale.linear().range([0, w]), 132 y = d3.scale.linear().range([0, h]); 133 134 var vis = d3.select("#body").append("div") 135 .attr("class", "chart") 136 .style("width", w + "px") 137 .style("height", h + "px") 138 .append("svg:svg") 139 .attr("width", w) 140 .attr("height", h); 141 142 var partition = d3.layout.partition() 143 .value(function(d) { return d.size; }); 144 145 (function(root) { 146 var g = vis.selectAll("g") 147 .data(partition.nodes(root)) 148 .enter().append("svg:g") 149 .attr("transform", function(d) { return "translate(" + x(d.y) + "," + y(d.x) + ")"; }) 150 .on("click", click); 151 152 var kx = w / root.dx, 153 ky = h / 1; 154 155 g.append("svg:rect") 156 .attr("width", root.dy * kx) 157 .attr("height", function(d) { return d.dx * ky; }) 158 .attr("class", function(d) { return d.children ? "parent" : "child"; }); 159 160 g.append("svg:text") 161 .attr("transform", transform) 162 .attr("dy", ".35em") 163 .style("opacity", function(d) { return d.dx * ky > 12 ? 1 : 0; }) 164 .text(function(d) { return d.name; }) 165 166 d3.select(window) 167 .on("click", function() { click(root); }) 168 169 function click(d) { 170 if (!d.children) return; 171 172 kx = (d.y ? w - 40 : w) / (1 - d.y); 173 ky = h / d.dx; 174 x.domain([d.y, 1]).range([d.y ? 40 : 0, w]); 175 y.domain([d.x, d.x + d.dx]); 176 177 var t = g.transition() 178 .duration(d3.event.altKey ? 7500 : 750) 179 .attr("transform", function(d) { return "translate(" + x(d.y) + "," + y(d.x) + ")"; }); 180 181 t.select("rect") 182 .attr("width", d.dy * kx) 183 .attr("height", function(d) { return d.dx * ky; }); 184 185 t.select("text") 186 .attr("transform", transform) 187 .style("opacity", function(d) { return d.dx * ky > 12 ? 1 : 0; }); 188 189 d3.event.stopPropagation(); 190 } 191 192 function transform(d) { 193 return "translate(8," + d.dx * ky / 2 + ")"; 194 } 195 })($data); 196 197 </script> 198 </body> 199 </html> 200