Skip to content

Instantly share code, notes, and snippets.

@wbzyl
Forked from mbostock/.block
Created June 25, 2012 19:17
Show Gist options
  • Save wbzyl/2990659 to your computer and use it in GitHub Desktop.
Save wbzyl/2990659 to your computer and use it in GitHub Desktop.
Rounded Rectangles (D3.js) / http://bl.ocks.org/2990659

Inspired by this Paper.js example, this demonstrates animated rounded rectangles (svg:rect elements with "rx" and "ry" attributes). The data associated with each rectangle is its center position and rotation angle in degrees. Each tick of the animation, the rectangles drift towards the mouse location and rotate slightly. Built with D3.js using SVG.

See live demo at blocks.

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://mbostock.github.com/d3/d3.js?1.29.1"></script>
</head>
<body>
<script type="text/javascript">
var mouse = [480, 250],
count = 0;
var svg = d3.select("body").append("svg:svg")
.attr("width", 960)
.attr("height", 500);
var g = svg.selectAll("g")
.data(d3.range(25))
.enter().append("svg:g")
.attr("transform", "translate(" + mouse + ")");
g.append("svg:rect")
.attr("rx", 6)
.attr("ry", 6)
.attr("x", -12.5)
.attr("y", -12.5)
.attr("width", 25)
.attr("height", 25)
.attr("transform", function(d, i) { return "scale(" + (1 - d / 25) * 20 + ")"; })
.style("fill", d3.scale.category20c());
g.map(function(d) {
return {center: [0, 0], angle: 0};
});
svg.on("mousemove", function() {
mouse = d3.svg.mouse(this);
});
d3.timer(function() {
count++;
g.attr("transform", function(d, i) {
d.center[0] += (mouse[0] - d.center[0]) / (i + 5);
d.center[1] += (mouse[1] - d.center[1]) / (i + 5);
d.angle += Math.sin((count + i) / 10) * 7;
return "translate(" + d.center + ")rotate(" + d.angle + ")";
});
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment