A fun combination of two Mike Bostock blocks - OMG Particules and Superformula Tweening
Click on the shapes at the top to change the drag shapes.
A fun combination of two Mike Bostock blocks - OMG Particules and Superformula Tweening
Click on the shapes at the top to change the drag shapes.
| <!DOCTYPE html> | |
| <meta charset="utf-8"> | |
| <style> | |
| body { | |
| margin: 0; | |
| background: #222; | |
| min-width: 960px; | |
| } | |
| rect { | |
| fill: none; | |
| pointer-events: all; | |
| } | |
| .small { | |
| fill: steelblue; | |
| fill-opacity: .5; | |
| stroke: white; | |
| } | |
| .small:hover { | |
| fill: white; | |
| fill: lightsteelblue; | |
| } | |
| .big { | |
| stroke: #666; | |
| stroke-width: 2; | |
| fill: none; | |
| } | |
| </style> | |
| <body> | |
| <script src="http://d3js.org/d3.v3.min.js"></script> | |
| <script src="http://d3js.org/d3.superformula.v0.min.js"></script> | |
| <script> | |
| var width = Math.max(1200, innerWidth), | |
| height = Math.max(600, innerHeight); | |
| var i = 0; | |
| var x = d3.scale.ordinal() | |
| .domain(d3.superformulaTypes) | |
| .rangePoints([0, 960], 1); | |
| var small = d3.superformula() | |
| .type(function(d) { return d; }) | |
| .size(960); | |
| var big = d3.superformula() | |
| .size(300) | |
| .type("square") | |
| .segments(360); | |
| var huge = d3.superformula() | |
| .size(30000) | |
| .type("square") | |
| .segments(360); | |
| var svg = d3.select("body").append("svg") | |
| .attr("width", width) | |
| .attr("height", height); | |
| svg.append("rect") | |
| .attr("width", width) | |
| .attr("height", height) | |
| .on("ontouchstart" in document ? "touchmove" : "mousemove", particle); | |
| svg.selectAll("a") | |
| .data(d3.superformulaTypes) | |
| .enter().append("a") | |
| .attr("xlink:title", String) | |
| .attr("transform", function(d, i) { return "translate(" + x(d) + ",40)"; }) | |
| .append("path") | |
| .attr("class", "small") | |
| .attr("d", small) | |
| .on("click", function(d) { d3.select(".big").attr("d", big.type(d)); }) | |
| .on("click", function(d) { d3.select(".huge").attr("d", huge.type(d)); }); | |
| function particle() { | |
| var m = d3.mouse(this); | |
| svg.insert("path","rect") | |
| .attr("class", "big") | |
| .attr("d", big) | |
| .style("stroke", d3.hsl((i = (i + 1) % 360), 1, .5)) | |
| .style("stroke-opacity", 1) | |
| .attr("transform", function(d, i) { return "translate("+ m[0] + "," + m[1] + ")"; }) | |
| .transition() | |
| .duration(1000) | |
| .ease(Math.sqrt) | |
| .attr("d", huge) | |
| .style("fill-opacity", 1e-6) | |
| .style("stroke-opacity", 1e-6) | |
| .remove(); | |
| d3.event.preventDefault(); | |
| } | |
| </script> |