jointjs
Version:
JavaScript diagramming library
100 lines (89 loc) • 3.07 kB
JavaScript
(function specialAttributesLinkArrowheads() {
var graph = new joint.dia.Graph;
new joint.dia.Paper({
el: document.getElementById('paper-special-attributes-link-arrowheads'),
model: graph,
width: 600,
height: 300,
gridSize: 10,
drawGrid: true,
background: {
color: 'rgba(0, 255, 0, 0.3)'
},
interactive: false
});
var link = new joint.shapes.standard.Link();
link.source(new g.Point(228.84550125020417, 100.76702664502545));
link.target(new g.Point(416.2834258874138, 72.03741369165368));
link.vertices([{ x: 300, y: 150 }]);
link.attr({
line: {
sourceMarker: {
'type': 'rect',
'width': 50,
'height': 10,
'y': -5,
'fill': 'rgba(255,0,0,0.3)',
'stroke': 'black'
},
targetMarker: {
'type': 'circle',
'r': 10,
'cx': 10,
'fill': 'rgba(0,255,0,0.3)',
'stroke': 'black'
}
}
});
link.addTo(graph);
function hourHand(link) {
link.transition('source', ((10 + (9.36 / 60)) / 12), {
delay: 1000,
duration: 19000,
valueFunction: function(start, startTime) {
var timeCorrection = ((startTime * (2 * Math.PI)) - (Math.PI / 2));
var origin = new g.Point(300, 150);
var radius = 140 / 1.618;
return function(t) {
return {
x: origin.x + (radius * Math.cos((t * 2 * Math.PI) + timeCorrection)),
y: origin.y + (radius * Math.sin((t * 2 * Math.PI) + timeCorrection))
};
};
}
});
}
function minuteHand(link) {
link.transition('target', (9.36 / 60), {
delay: 1000,
duration: 19000,
timingFunction: function(time) {
return ((time * 12) - (Math.floor(time * 12)));
},
valueFunction: function(start, startTime) {
var timeCorrection = ((startTime * (2 * Math.PI)) - (Math.PI / 2));
var origin = new g.Point(300, 150);
var radius = 140;
return function(t) {
return {
x: origin.x + (radius * Math.cos((t * 2 * Math.PI) + timeCorrection)),
y: origin.y + (radius * Math.sin((t * 2 * Math.PI) + timeCorrection))
};
};
}
});
}
link.currentTransitions = 0;
hourHand(link);
minuteHand(link);
link.on('transition:start', function(link) {
link.currentTransitions += 1;
});
link.on('transition:end', function(link) {
link.currentTransitions -= 1;
if (link.currentTransitions === 0) {
hourHand(link);
minuteHand(link);
}
});
}());