forked from zanarmstrong's block: Adaption of Jfire.io animation, for teaching purposes
forked from zanarmstrong's block: Stripped adaptation of Jfire.io animation, for teaching purposes
forked from zanarmstrong's block: Adaption of Jfire.io animation, for teaching purposes
forked from zanarmstrong's block: Stripped adaptation of Jfire.io animation, for teaching purposes
| <!DOCTYPE html> | |
| <head> | |
| <meta charset="utf-8"> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script> | |
| <style> | |
| </style> | |
| </head> | |
| <body> | |
| <script> | |
| // created by http://jfire.io/animations/2015-03-09/, adapted for demo | |
| var width = 500, | |
| height = 500, | |
| n = 20; | |
| var margin = {top: 20, right: 10, bottom: 20, left: 10}; | |
| var svg = d3.select("body").append("svg") | |
| .attr("width", width) | |
| .attr("height", height) | |
| var g = svg.selectAll(".groups") | |
| .data(d3.range(n)) | |
| .enter().append("g").attr("class", "group"); | |
| g.append("path") | |
| .attr("fill", "none") | |
| .attr("stroke", "#d1d1d1") | |
| .attr("stroke-width", 3) | |
| .attr("d", "M-150,0L150,0"); | |
| g.selectAll("ellipse") | |
| .data([-150, 150]) | |
| .enter().append("ellipse") | |
| .attr("cx", function(d) { return d; }) | |
| .attr("cy", 0) | |
| .attr("rx", 10) | |
| .attr("ry", 7) | |
| .attr("fill", "#bbb"); | |
| d3.timer(function(t) { | |
| g.attr("transform", function(d) {return "translate(" + [width / 2, (d + 1) * height / (n + 1)] + ")scale(" + (Math.sin(d / 2 - t / 1000) + 1) / 2 + ","+ 0.1*d+")";}) | |
| }); | |
| </script> | |
| </body> | |