Mau*_*lar 1 javascript canvas fabricjs
我想在fabric.Group 内部的fabric.js 元素上放置一个按钮。
如何获取相对于织物元素的画布容器的左上角坐标,然后将其设置到按钮?
jsfiddle: https: //jsfiddle.net/d9sp16yc/2/
我尝试过这样或这样的事情,但没有得到我想要的结果。按钮稍微向右或向左/底部或顶部移动。
另一件事是,setSize当窗口大小调整时,该函数会缩放组(只是为了获得响应行为):
function setSize() {
var width = $('.container').width();
var height = width * 0.6;
canvas.setWidth(width);
canvas.setHeight(height);
group.scaleToWidth(width);
canvas.centerObjectH(group);
// setPos($('#btn'), rect);
}
Run Code Online (Sandbox Code Playgroud)
问题是这会影响坐标的计算方式。
即使窗口大小调整后,是否可以将其放在织物对象的左上角?
我真的需要一个快速的解决方案,所以我将不胜感激任何建议/帮助来实现这一目标。
提前致谢。
看看这个(与画布外的对象交互)。我希望它有帮助...
简而言之,您可以使用画布内对象的绝对坐标将 HTML 元素定位到画布外。
这是代码和网站的屏幕截图。它只是将 HTML 按钮放置在结构图像元素上,并在图像上分配移动事件,因此当您移动图像时,按钮会跟随它。
(function() {
var canvas = this.__canvas = new fabric.Canvas('c');
fabric.Object.prototype.transparentCorners = false;
fabric.Object.prototype.originX = fabric.Object.prototype.originY = 'center';
fabric.Canvas.prototype.getAbsoluteCoords = function(object) {
return {
left: object.left + this._offset.left,
top: object.top + this._offset.top
};
}
var btn = document.getElementById('inline-btn'),
btnWidth = 85,
btnHeight = 18;
function positionBtn(obj) {
var absCoords = canvas.getAbsoluteCoords(obj);
btn.style.left = (absCoords.left - btnWidth / 2) + 'px';
btn.style.top = (absCoords.top - btnHeight / 2) + 'px';
}
fabric.Image.fromURL('../lib/pug.jpg', function(img) {
canvas.add(img.set({ left: 250, top: 250, angle: 30 }).scale(0.25));
img.on('moving', function() { positionBtn(img) });
positionBtn(img);
});
})();
Run Code Online (Sandbox Code Playgroud)