summaryrefslogtreecommitdiff
path: root/priv/static/js/metricsgraphics/misc/transitions.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--priv/static/js/metricsgraphics/misc/transitions.js31
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;