Javascript Fabric.js:更改椭圆中的原点将更改左侧位置

Javascript Fabric.js:更改椭圆中的原点将更改左侧位置,javascript,html5-canvas,fabricjs,Javascript,Html5 Canvas,Fabricjs,我遇到的情况是,我在fabric.js中从originX='right'和 之后将其更改为originX='left'。 我看到的是,将原点更改为左侧,并通过以下计算调整左侧: ellipse.left -= ellipse.width 我仍然看到左边位置的不同 为了解释这一点,我添加了一个,在更改originX之前,我添加了3秒的超时。因此,请打开并等待3秒钟,看看位置如何变化,这在理想情况下是不应该的。 我有什么错误或建议吗 代码: var canvas = new fabric.Canv

我遇到的情况是,我在fabric.js中从originX='right'和 之后将其更改为originX='left'。 我看到的是,将原点更改为左侧,并通过以下计算调整左侧:

ellipse.left -= ellipse.width
我仍然看到左边位置的不同

为了解释这一点,我添加了一个,在更改originX之前,我添加了3秒的超时。因此,请打开并等待3秒钟,看看位置如何变化,这在理想情况下是不应该的。 我有什么错误或建议吗

代码:

var canvas = new fabric.Canvas('paper');
var ellipse = new fabric.Ellipse({
   left: 300,
   top: 10,
   rx: 145,
   ry: 65,
   strokeWidth: 4,
   stroke: 'blue',
   fill: '',
   originX: 'right',
   originY: 'top'
});
canvas.add(ellipse);
canvas.renderAll();
var log = document.getElementById('log');
log.innerHTML = ellipse.left;
//changing the origin
setTimeout(function() {
   ellipse.originX = 'left';
   ellipse.left -= ellipse.width;
   canvas.renderAll();
   log.innerHTML += ', ' + ellipse.left;
}, 3000);
由于椭圆的笔划有一定的宽度,因此,您还需要将其从椭圆的左位置排除,如下所示

ellipse.left -= ellipse.width + ellipse.strokeWidth;

这是您的代码的修订版本

var canvas=newfabric.canvas('paper'{
isDrawingMode:false
});
var椭圆=新结构。椭圆({
左:300,,
前10名,
rx:145,
ry:65,
冲程宽度:4,
笔划:“蓝色”,
填充:假,
originX:'对',
原创:“顶级”
});
canvas.add(椭圆);
canvas.renderAll();
var log=document.getElementById('log');
log.innerHTML=ellipse.left;
//更改原点
setTimeout(函数(){
椭圆.原点='左';
椭圆.left-=椭圆.width+椭圆.strokeWidth;
canvas.renderAll();
log.innerHTML+=','+eliple.left;
}, 3000);

由于椭圆的笔划有一定的宽度,因此,您还需要将其从椭圆的左侧位置排除,如下所示

ellipse.left -= ellipse.width + ellipse.strokeWidth;

这是您的代码的修订版本

var canvas=newfabric.canvas('paper'{
isDrawingMode:false
});
var椭圆=新结构。椭圆({
左:300,,
前10名,
rx:145,
ry:65,
冲程宽度:4,
笔划:“蓝色”,
填充:假,
originX:'对',
原创:“顶级”
});
canvas.add(椭圆);
canvas.renderAll();
var log=document.getElementById('log');
log.innerHTML=ellipse.left;
//更改原点
setTimeout(函数(){
椭圆.原点='左';
椭圆.left-=椭圆.width+椭圆.strokeWidth;
canvas.renderAll();
log.innerHTML+=','+eliple.left;
}, 3000);