使用Fabricjs无法在所有方向完美地自由游动

时间:2015-11-17 12:16:02

标签: javascript fabricjs

我想在Fabricjs真棒库中自由画一个圆圈,但是当涉及到自由画一个圆圈时,我遇到了一些问题。 我能够实现相同的矩形自由绘图,但在绘制圆形时未能达到完美。

这是代码: `

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);

    if(origX>pointer.x){
    circle.set({ left: Math.abs(pointer.x) });
    }
    if(origY>pointer.y){
    circle.set({ top: Math.abs(pointer.y) });
    }

    circle.set({ radius: Math.abs(origY - pointer.y)/2 });


    canvas.renderAll();
});

canvas.on('mouse:up', function(o){
  isDown = false;
});

`

这是Fiddle

1 个答案:

答案 0 :(得分:1)

看看我更新的小提琴:

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

我修改了你的鼠标:移动函数以考虑位置和strokeWidth;

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();
});