UNPKG

1.84 kBJavaScriptView Raw
1"use strict";
2exports.__esModule = true;
3exports.animateNodes = void 0;
4/**
5 * Sigma.js Animation Helpers
6 * ===========================
7 *
8 * Handy helper functions dealing with nodes & edges attributes animation.
9 */
10var utils_1 = require("./utils");
11var easings = require("./easings");
12/**
13 * Defaults.
14 */
15var ANIMATE_DEFAULTS = {
16 easing: "quadraticInOut",
17 duration: 150
18};
19/**
20 * Function used to animate the nodes.
21 */
22function animateNodes(graph, targets, options, callback) {
23 options = utils_1.assign({}, ANIMATE_DEFAULTS, options);
24 var easing = typeof options.easing === "function" ? options.easing : easings[options.easing];
25 var start = Date.now();
26 var startPositions = {};
27 for (var node in targets) {
28 var attrs = targets[node];
29 startPositions[node] = {};
30 for (var k in attrs)
31 startPositions[node][k] = graph.getNodeAttribute(node, k);
32 }
33 var frame = null;
34 var step = function () {
35 var p = (Date.now() - start) / options.duration;
36 if (p >= 1) {
37 // Animation is done
38 for (var node in targets) {
39 var attrs = targets[node];
40 for (var k in attrs)
41 graph.setNodeAttribute(node, k, attrs[k]);
42 }
43 if (typeof callback === "function")
44 callback();
45 return;
46 }
47 p = easing(p);
48 for (var node in targets) {
49 var attrs = targets[node];
50 var s = startPositions[node];
51 for (var k in attrs)
52 graph.setNodeAttribute(node, k, attrs[k] * p + s[k] * (1 - p));
53 }
54 frame = requestAnimationFrame(step);
55 };
56 step();
57 return function () {
58 if (frame)
59 cancelAnimationFrame(frame);
60 };
61}
62exports.animateNodes = animateNodes;