【问题标题】:How to put an html element over a fabric.js element如何将 html 元素放在 fabric.js 元素上
【发布时间】:2017-09-16 08:33:06
【问题描述】:

我想在 fabric.Group 内部的 fabric.js 元素上放置一个按钮。

如何获取相对于织物元素的画布容器的左上角坐标,然后将其设置为按钮?

jsfiddle:https://jsfiddle.net/d9sp16yc/2/

我尝试过thisthis 之类的方法,但没有得到我想要的结果。按钮稍微向右或向左/底部或顶部移动。

另一件事是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);
}

问题是这会影响坐标的计算方式。

即使调整窗口大小,是否也可以将其放在织物对象的左上角?

我真的需要一个快速的解决方案,所以如果有任何建议/帮助来实现这一点,我将不胜感激。

提前致谢。

【问题讨论】:

    标签: javascript canvas fabricjs


    【解决方案1】:

    看看这个(Interaction with objects outside canvas)。希望对你有帮助...

    简而言之,您可以使用画布内对象的绝对坐标将 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);
      });
    })();
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多