Skip to content

Instantly share code, notes, and snippets.

@eesur
Created June 7, 2016 10:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eesur/356059ab74ddede0b898e2044c9fd18f to your computer and use it in GitHub Desktop.
Save eesur/356059ab74ddede0b898e2044c9fd18f to your computer and use it in GitHub Desktop.
d3js | force layout with rect
<!DOCTYPE html>
<meta charset="utf-8">
<!-- http://clrs.cc/ -->
<link href="//s3-us-west-2.amazonaws.com/colors-css/2.2.0/colors.min.css" rel="stylesheet">
<style>
body { background: #130C0E; }
</style>
<body>
<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
<!-- d3 code -->
<script src="script-compiled.js" charset="utf-8"></script>
'use strict';
var w = window.innerWidth;
var h = window.innerHeight;
// store generated data
var data = [];
var svg = d3.select('body').append('svg').attr('width', w).attr('height', h);
var rect = svg.selectAll('rect');
var force = d3.layout.force().size([w, h]).on('tick', function () {
rect.attr('x', function (d) {
return d.x;
}).attr('y', function (d) {
return d.y;
});
});
var render = function render(data) {
rect = rect.data(data, function (d) {
return d.id;
});
rect.enter().append('rect').attr({
fill: function fill(d) {
return d.color;
},
width: 18,
height: 18
}).call(force.drag);
rect.exit().transition().attr('r', 0).remove();
force.nodes(data).start();
};
// generate some data
function update() {
var n = 0;
var c = ['red', 'green', 'blue'];
return function () {
data.push({
id: n,
color: c[n % 3]
});
render(data);
n++;
};
}
// update every second
// note: calling as update()(); (higher order function)
setInterval(update(), 500);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment