【发布时间】:2018-12-31 18:49:31
【问题描述】:
下面是一个 HTML 文件,它会绘制一个 10x10 的正方形网格,由浅灰色和深灰色交替出现。它用 0 或 1 填充一个名为 the_grid 的二维数组;然后用x、y 和color 填充一个名为nodes 的一维数组;然后用 d3 绘制nodes。他们都出现了。它们看起来像这样:
我如何按照nodes 数组给出的顺序一次绘制(即出现)一个nodes(这样我就可以绘制不同的图案,比如垂直擦除、水平擦除等等)?
我尝试摆弄transition 函数但没有成功。它只是绘制整个网格,并将其滑入到位。方块并没有明显地一一出现。
代码:
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<script>
function draw_function() {
var vis = d3.select("#graph")
.append("svg")
.attr("width", 200).attr("height", 200);
// fill the_grid
var shape=[10,10];
var the_grid=[];
for (var idx = 0; idx < shape[0]; idx++) {
var row = [];
for (var jdx = 0; jdx < shape[1]; jdx++) {
var val = (idx+jdx)/2;
row.push(Math.floor(val)==val ? 1 : 0);
}
the_grid.push(row);
}
// fill nodes
var rectwidth = 10;
var nodes = [];
for (var idx = 0; idx < the_grid.length; idx++) {
for (var jdx = 0; jdx < the_grid[0].length; jdx++) {
var node = {x: idx * (rectwidth+1),
y: jdx * (rectwidth+1),
color: the_grid[idx][jdx] == 1 ? 'black' : 'lightgrey'};
nodes.push(node);
}
}
// draw nodes
vis.selectAll("rect.nodes")
.data(nodes)
.enter()
.append("svg:rect")
.attr("x", function(d) { return d.x; })
.attr("y", function(d) { return d.y; })
.attr("height", rectwidth)
.attr("width", rectwidth)
.attr("fill", function(d) { return d.color; })
}
// function has to execute after dom is loaded
window.onload = draw_function
</script>
<style>rect { color: black; }</style>
</head>
<body><div id="graph"/></body>
</html>
【问题讨论】:
标签: d3.js