【问题标题】:"Drop Zones" with Fabric.js?Fabric.js 的“拖放区”?
【发布时间】:2019-10-27 09:42:52
【问题描述】:

有没有办法使用fabric.js 创建像interact.js 这样的“拖放区”?

我不一定尝试过任何事情。我对如何尝试实现它有自己的想法,但我想我会四处打听并在网上搜索以寻求帮助,所以如果已经完成了,我就不必发明一些东西。我在谷歌上搜索没有成功。

*注意:我试图避免添加另一个库,特别是如果我只想使用它来完成一件事的功能,所以是的,我可以只使用 interact.js,但我宁愿不尽可能存储或引用另一个库。

编辑: 对于那些正在寻找可能的解决方案的人......它可以通过 isContainedWithinObject(other, absoluteopt, calculateopt) → {Boolean} 实现......我在阅读有关 fabric.js 的文档后发现了这个。

【问题讨论】:

    标签: javascript fabricjs


    【解决方案1】:

    您可以使用经典输入法并将其设置为带有 css 的拖放区。请参阅下面的 sn-p。

    var canvas = new fabric.Canvas('canvas');
    canvas.setHeight(300);
    canvas.setWidth(400);
    
    document.querySelector("#pdf-upload").addEventListener("change", function(e) {
      var file = e.target.files[0]
      if (file.type == "image/jpeg" || "image/png") {
        var reader = new FileReader();
        reader.onload = function(event) {
          var data = event.target.result;
          fabric.Image.fromURL(data, function(image) {
            var imageObject = image;
            canvas.setBackgroundImage(imageObject);
            imageObject.scaleToHeight(300);
            canvas.renderAll();
          });
        };
        reader.readAsDataURL(file);
      };
      $("#canvas").css("visibility", "visible");
      $(".dz").css("visibility", "hidden");
    });
    .dz-text {
      position: absolute;
      left: 50%;
      margin-left: -100px;
      top: 50%;
      width: 200px;
      text-align: center;
    }
    
    .dz-button {
      position: absolute;
      top: 50%;
      margin-top: -50px;
      left: 50%;
      z-index: 3;
      margin-left: -150px;
      width: 300px;
      position: absolute;
      padding: 120px 0 0 0;
      height: 100px;
      overflow: hidden;
      border: dotted 5px black;
      -webkit-box-sizing: border-box;
      -moz-box-sizing: border-box;
      box-sizing: border-box;
      border-radius: 20px;
      background-size: 60px 60px;
      background-color: rgba(155, 105, 255, 0.2);
      background-clip: padding-box;
    }
    
    .dz-button:hover {
      background-color: rgba(155, 105, 255, 0.3);
    }
    
    #canvas {
      border: solid 1px black;
      z-index: 1;
      visibility: hidden;
    }
    <html>
    
    <head>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/3.4.0/fabric.js"></script>
    </head>
    
    <body>
      <div class="dz">
        <div class="dz-text"><b>Drop image here</b></div>
        <input class="dz-button" id="pdf-upload" type="file">
      </div>
    
      <canvas id="canvas"></canvas>
    </body>
    
    </html>

    【讨论】:

    • 它就像一个魅力,但它不是我想要的。我需要它来检测织物元素是否已进入或退出该区域,无论是 IText、矩形、织物图像等。更不用说,我需要其中的 9 个......在画布的每个角落一个,一个分别在顶部、底部和侧面,然后在中间一个大的。这个想法是当一个元素被放置在放置区域内时,它会居中......并且盒子需要是动态的,而不是设定的大小,我希望能够用 css 处理,主要问题是元素检测和创建盒子。
    • 所以这个代码的真正问题是,我需要它来检测一个元素是否在容器内,它在画布内。我想也许我可以像织物矩形一样使用,并在它周围加一个边框,然后填充白色,但是我不知道如何检测矩形内是否有元素。
    猜你喜欢
    • 2012-12-01
    • 1970-01-01
    • 2014-02-14
    • 2020-06-01
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    相关资源
    最近更新 更多