如何使用鼠标在fabricjs中自由绘制圆



我在我的项目中使用Fabricjs,现在正在用Fabricjs库绘制圆。

我可以做到,但在x轴上不太合适,因为在x轴拖动似乎不合适,而在y轴拖动效果很好。

有人能把它固定在任何轴上工作吗。

还有2-3个关于stackoverflow的问题没有得到正确回答,关于Circle,我之前问了1个。

以下是我迄今为止所做的工作:绘制圆

代码:`

var canvas = new fabric.Canvas("canvas2");
var circle, isDown, origX, origY;
canvas.on('mouse:down', function(o){
isDown = true;
var pointer = canvas.getPointer(o.e);
origX = pointer.x;
origY = pointer.y;
circle = new fabric.Circle({
    left: origX,
    top: origY,
    originX: 'left',
    originY: 'top',
    radius: pointer.x-origX,
    angle: 0,
    fill: '',
    stroke:'red',
    strokeWidth:3,
});
canvas.add(circle);
});
canvas.on('mouse:move', function(o){
if (!isDown) return;
var pointer = canvas.getPointer(o.e);
var radius = Math.abs(origY - pointer.y)/2;
if (radius > circle.strokeWidth) {
    radius -= circle.strokeWidth/2;
}
circle.set({ radius: radius});
if(origX>pointer.x){
    circle.set({originX: 'right' });
} else {
    circle.set({originX: 'left' });
}
if(origY>pointer.y){
    circle.set({originY: 'bottom'  });
} else {
    circle.set({originY: 'top'  });
}
canvas.renderAll();
});
canvas.on('mouse:up', function(o){
  isDown = false;
});

`

请参阅更新fiddle。选择半径时,只需从x和y中选择最小值或最大值即可。

http://jsfiddle.net/8u1cqasa/17/

我(再次)修改了你的鼠标:移动功能,将两个移动都考虑在内。

canvas.on('mouse:move', function(o){
    if (!isDown) return;
    var pointer = canvas.getPointer(o.e);
    var radius = Math.max(Math.abs(origY - pointer.y),Math.abs(origX - pointer.x))/2;
    if (radius > circle.strokeWidth) {
        radius -= circle.strokeWidth/2;
    }
    circle.set({ radius: radius});
    if(origX>pointer.x){
        circle.set({originX: 'right' });
    } else {
        circle.set({originX: 'left' });
    }
    if(origY>pointer.y){
        circle.set({originY: 'bottom'  });
    } else {
        circle.set({originY: 'top'  });
    }
    canvas.renderAll();
});

最新更新