Javascript JointJS:使链接标签在链接本身上移动
对于JointJS图中的链接,我尝试实现本教程()来移动链接上的标签,但我不知道将Javascript JointJS:使链接标签在链接本身上移动,javascript,jointjs,Javascript,Jointjs,对于JointJS图中的链接,我尝试实现本教程()来移动链接上的标签,但我不知道将ConstraintElementView放在哪里 我想使链接的标签可以在链接上移动。那么,如何将链接定义为可移动标签的“路径” ConstraintTelementView var constraint = label; // ??? var ConstraintElementView = joint.dia.ElementView.extend({ pointerdown: function(evt
ConstraintElementView
放在哪里
var constraint = label; // ???
var ConstraintElementView = joint.dia.ElementView.extend({
pointerdown: function(evt, x, y) {
var position = this.model.get('position');
var size = this.model.get('size');
var center = g.rect(position.x, position.y, size.width, size.height).center();
var intersection = constraint.intersectionWithLineFromCenterToPoint(center);
joint.dia.ElementView.prototype.pointerdown.apply(this, [evt, intersection.x, intersection.y]);
},
pointermove: function(evt, x, y) {
var intersection = constraint.intersectionWithLineFromCenterToPoint(g.point(x, y));
joint.dia.ElementView.prototype.pointermove.apply(this, [evt, intersection.x, intersection.y]);
}
});
链接标签
paper.on({
/**
* Doubleclick on link: Add label for link
*/
'cell:pointerdblclick': function(cellView, event, x, y){
if (cellView.model.isLink()) {
cellView.model.label(0, {
position: .5,
attrs: {
rect: { fill: '#eeeeee' },
text: { text: 'text', 'font-size': 12, ref: 'rect' }
}
});
}
}
});
纸张
var paper = new joint.dia.Paper({
el: $('#canvas'),
width: 801,
height: 496,
model: graph,
gridSize: 10,
elementView: ConstraintElementView,
defaultLink: new joint.dia.Link({
router: { name: 'manhattan' },
connector: { name: 'rounded' },
attrs: {
'.marker-target': { d: 'M 10 0 L 0 5 L 10 10 z', fill: '#6a6c8a', stroke: '#6a6c8a' },
'.connection': { stroke: '#6a6c8a', 'stroke-width': 2 }
}
})
});
您不需要创建任何路径。只要通过计算标签的相对值来改变标签的位置,当然也可以使用绝对值
'cell:pointermove': function(event, x, y) {
if (event.model.isLink()) {
var clickPoint = { x: event._dx, y: event._dy },
lengthTotal = event.sourcePoint.manhattanDistance(event.targetPoint),
length = event.sourcePoint.manhattanDistance(clickPoint),
position = round(length / lengthTotal, 2);
event.model.label(0, { position: position });
}
}
可通过纸张上
交互式对象的labelMove
选项,使标签沿链接移动:
var纸张=新接缝直径纸张({
// ...
交互式:{labelMove:true}
// ...
})
此标志默认为false
,但它会计算直接距离。我需要曼哈顿线。有没有可能得到曼哈顿每段距离的大小?只有两个注释:1。在IE11中,未定义round
,Math.round不是合适的替代品。但是,完全删除轮
也同样有效。2.我必须将此代码与paper.on()
一起使用,答案中不清楚。希望这对其他人有帮助。哦,我在文件里没看到。但我想将标签捕捉到线段的中心。不知道是否有可能得到每个段的大小。因此,我认为我必须使用类似于“user3848987”给出的解决方案。顺便说一下:箭头和删除图标干扰了标签的移动。是否可以通过单击而不是悬停链接来显示这些内容?interactive:function(cellView){return{labelMove:true,vertexAdd:false}
没有效果:不会添加顶点,但标签仍然不可移动……我有相同的交互选项(尽管我将其设置为对象而不是函数)它可以工作,但是你必须抓住标签的边缘,而不是里面的文本。