jointjs
Version: 
JavaScript diagramming library
98 lines (86 loc) • 2.18 kB
JavaScript
var graph = new joint.dia.Graph;
new joint.dia.Paper({
    el: document.getElementById('paper'),
    width: 650,
    height: 400,
    gridSize: 1,
    model: graph
});
var ball = new joint.shapes.standard.Circle({
    angle: 0,
    position: { x: -25, y: 50 },
    size: { width: 50, height: 50 },
    attrs: {
        label: {
            text: 'ball',
            fontSize: 20
        },
        body: {
            fill: '#FFFFFF'
        }
    }
});
graph.addCell(ball);
ball.transition('angle', 360, {
    delay: 1000,
    duration: 1000
});
ball.transition('position/x', 550, {
    delay: 1000,
    duration: 1000,
    timingFunction: joint.util.timing.reverse(joint.util.timing.quad)
});
ball.transition('position/y', 350, {
    delay: 1000,
    duration: 1000,
    timingFunction: joint.util.timing.reverse(joint.util.timing.bounce)
});
ball.transition('attrs/body/fill', '#FFFF00', {
    delay: 3000,
    duration: 500,
    valueFunction: joint.util.interpolate.hexColor
});
ball.transition('attrs/label', { text: 'yellow ball', fontSize: 8 }, {
    delay: 5000,
    duration: 2000,
    timingFunction: joint.util.timing.bounce,
    valueFunction: function(start, end) {
        return function(time) {
            return {
                text: end.text.substr(0, Math.ceil(end.text.length * time)),
                fontSize: start['font-size'] + (end['font-size'] - start['font-size']) * time
            };
        };
    }
});
var ufo = new joint.shapes.standard.Ellipse({
    angle: 0,
    position: { x: 400, y: 50 },
    size: { width: 35, height: 20 },
    attrs: {
        label: {
            text: 'u.f.o.',
            fontSize: 10
        },
        body: {
            fill: '#FFFFFF'
        }
    }
});
graph.addCell(ufo);
function fly(el) {
    el.transition('position', 20, {
        delay: 0,
        duration: 5000,
        valueFunction: function(a, b) {
            return function(t) {
                return {
                    x: a.x + 10 * b * (Math.cos(t * 2 * Math.PI) - 1),
                    y: a.y - b * Math.sin(t * 2 * Math.PI)
                };
            };
        }
    });
}
fly(ufo);
ufo.on('transition:end', fly);