sigma
Version:
A JavaScript library dedicated to graph drawing.
57 lines (56 loc) • 1.91 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.animateNodes = exports.ANIMATE_DEFAULTS = void 0;
var index_1 = require("./index");
var easings_1 = __importDefault(require("./easings"));
exports.ANIMATE_DEFAULTS = {
easing: "quadraticInOut",
duration: 150,
};
/**
* Function used to animate the nodes.
*/
function animateNodes(graph, targets, opts, callback) {
var options = Object.assign({}, exports.ANIMATE_DEFAULTS, opts);
var easing = typeof options.easing === "function" ? options.easing : easings_1.default[options.easing];
var start = Date.now();
var startPositions = {};
for (var node in targets) {
var attrs = targets[node];
startPositions[node] = {};
for (var k in attrs)
startPositions[node][k] = graph.getNodeAttribute(node, k);
}
var frame = null;
var step = function () {
var p = (Date.now() - start) / options.duration;
if (p >= 1) {
// Animation is done
for (var node in targets) {
var attrs = targets[node];
for (var k in attrs)
graph.setNodeAttribute(node, k, attrs[k]);
}
if (typeof callback === "function")
callback();
return;
}
p = easing(p);
for (var node in targets) {
var attrs = targets[node];
var s = startPositions[node];
for (var k in attrs)
graph.setNodeAttribute(node, k, attrs[k] * p + s[k] * (1 - p));
}
frame = index_1.requestFrame(step);
};
step();
return function () {
if (frame)
index_1.cancelFrame(frame);
};
}
exports.animateNodes = animateNodes;