diff options
Diffstat (limited to '')
-rw-r--r-- | priv/static/js/metricsgraphics/misc/transitions.js | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/priv/static/js/metricsgraphics/misc/transitions.js b/priv/static/js/metricsgraphics/misc/transitions.js new file mode 100644 index 0000000..da1e503 --- /dev/null +++ b/priv/static/js/metricsgraphics/misc/transitions.js @@ -0,0 +1,31 @@ +// http://bl.ocks.org/mbostock/3916621 +function path_tween(d1, precision) { + return function() { + var path0 = this, + path1 = path0.cloneNode(), + n0 = path0.getTotalLength() || 0, + n1 = (path1.setAttribute("d", d1), path1).getTotalLength() || 0; + + // Uniform sampling of distance based on specified precision. + var distances = [0], + i = 0, + dt = precision / Math.max(n0, n1); + while ((i += dt) < 1) distances.push(i); + distances.push(1); + + // Compute point-interpolators at each distance. + var points = distances.map(function(t) { + var p0 = path0.getPointAtLength(t * n0), + p1 = path1.getPointAtLength(t * n1); + return d3.interpolate([p0.x, p0.y], [p1.x, p1.y]); + }); + + return function(t) { + return t < 1 ? "M" + points.map(function(p) { + return p(t); + }).join("L") : d1; + }; + }; +} + +MG.path_tween = path_tween; |