我正在使用Konva.js在浏览器中标注数据可视化。一个常见的用例是在形状(矩形,椭圆形)及其描述(文本节点)之间画线。用户需要拖动,旋转和调整线条尺寸。调整大小仅限于线宽。
线路及其变压器当前正在按如下方式添加:
var line = new Konva.Line({
x: stage.getWidth() / 2,
y: stage.getHeight() / 2,
points: [0, 0, 100, 0],
stroke: '#000',
strokeWidth: 3,
lineCap: 'round',
lineJoin: 'round',
draggable: true,
id: id,
strokeScaleEnabled: false,
hitStrokeWidth: 15
});
layer.add(line);
var tr = new Konva.Transformer({
node: line,
enabledAnchors: ['middle-left', 'middle-right']
});
layer.add(tr);
正确定位一条线目前还不太直观,因为它要求用户使用旋转的左,中左和右中锚分别旋转和调整线的大小。
相反,我正在寻找一种使用左中和左中锚同时旋转和调整线条大小的方法。我的灵感来自于PowerPoint-线的两端都只有锚,可用于同时调整大小和旋转:
我曾尝试在Konva的Transformer _handleMouseMove函数中结合使用旋转器和左中/右中功能,但这无法正常工作。
也许有人找到一种使用左右锚来同时做两件事的方法吗?
答案 0 :(得分:2)
目前,我不建议在简单的行中使用Konva.Transformer
。用两个圆圈构建自定义解决方案很简单:
const line = new Konva.Line({
points: [50, 50, 250, 50],
stroke: 'green'
});
layer.add(line);
const anchor1 = new Konva.Circle({
x: line.points()[0],
y: line.points()[1],
radius: 10,
fill: 'red',
draggable: true
})
layer.add(anchor1);
const anchor2 = new Konva.Circle({
x: line.points()[2],
y: line.points()[3],
radius: 10,
fill: 'red',
draggable: true
})
layer.add(anchor2);
function updateLine() {
const points = [
anchor1.x(),
anchor1.y(),
anchor2.x(),
anchor2.y(),
]
line.points(points);
layer.batchDraw();
}
anchor1.on('dragmove', updateLine);
anchor2.on('dragmove', updateLine);