【发布时间】:2018-02-15 22:06:10
【问题描述】:
我使用 fabric.js 创建了一个画布,在移动设备上遇到了一个非常奇怪的问题。每当我添加一个对象(即一个圆圈)时,它都会有一个奇怪的行为:无论我在桌面上点击它的位置,但在移动设备上它的左上角,并且在画布上添加后无法选择该对象。
setupCircle(x0, y0) {
this.circleCoord.x0 = x0;
this.circleCoord.y0 = y0;
this.circleCoord.circObj = new fabric.Circle({
left: x0,
top: y0,
radius: 100,
strokeWidth: 5,
hasControls: true,
borderColor: 'red',
fill: 'rgba(0,0,0,0)',
stroke: this.canvas.freeDrawingBrush.color,
originX: 'center',
originY: 'center'
});
this.canvas.add(this.circleCoord.circObj);
}
这就是我在鼠标移动时添加形状的方式。以上是我如何在不同的屏幕分辨率上缩放画布及其对象
getCanvasAtResoution(newWidth, newHeight) {
const id = 'c' + this.panelId;
const scaleMultiplier = newWidth / document.getElementsByTagName('canvas')[0].clientWidth;
let objects = this.canvas.getObjects();
for (let i in objects) {
objects[i].scaleX = objects[i].scaleX * scaleMultiplier;
objects[i].scaleY = objects[i].scaleY * scaleMultiplier;
objects[i].left = objects[i].left * scaleMultiplier;
objects[i].top = objects[i].top * scaleMultiplier;
objects[i].setCoords();
}
let obj = this.canvas.backgroundImage;
if (obj) {
obj.scaleX = obj.scaleX * scaleMultiplier;
obj.scaleY = obj.scaleY * scaleMultiplier;
}
this.canvas.discardActiveObject();
this.canvas.setDimensions({
width: newWidth,
height: newHeight
});
this.canvas.renderAll();
this.canvas.calcOffset();
},
【问题讨论】:
-
你怎么称呼
setupCircle(x0, y0),那里的x0和y0是什么? -
我通过 e.layerX 和 e.layerY 在 mouse:down 事件中得到 x0 和 y0
标签: javascript canvas fabricjs