<legend id='QdU7j'><style id='QdU7j'><dir id='QdU7j'><q id='QdU7j'></q></dir></style></legend>
  • <small id='QdU7j'></small><noframes id='QdU7j'>

        <bdo id='QdU7j'></bdo><ul id='QdU7j'></ul>
    1. <i id='QdU7j'><tr id='QdU7j'><dt id='QdU7j'><q id='QdU7j'><span id='QdU7j'><b id='QdU7j'><form id='QdU7j'><ins id='QdU7j'></ins><ul id='QdU7j'></ul><sub id='QdU7j'></sub></form><legend id='QdU7j'></legend><bdo id='QdU7j'><pre id='QdU7j'><center id='QdU7j'></center></pre></bdo></b><th id='QdU7j'></th></span></q></dt></tr></i><div id='QdU7j'><tfoot id='QdU7j'></tfoot><dl id='QdU7j'><fieldset id='QdU7j'></fieldset></dl></div>
      <tfoot id='QdU7j'></tfoot>
      1. Fabric.js - 自由绘制矩形

        时间:2023-08-02

        <i id='ZiTDO'><tr id='ZiTDO'><dt id='ZiTDO'><q id='ZiTDO'><span id='ZiTDO'><b id='ZiTDO'><form id='ZiTDO'><ins id='ZiTDO'></ins><ul id='ZiTDO'></ul><sub id='ZiTDO'></sub></form><legend id='ZiTDO'></legend><bdo id='ZiTDO'><pre id='ZiTDO'><center id='ZiTDO'></center></pre></bdo></b><th id='ZiTDO'></th></span></q></dt></tr></i><div id='ZiTDO'><tfoot id='ZiTDO'></tfoot><dl id='ZiTDO'><fieldset id='ZiTDO'></fieldset></dl></div>

        • <bdo id='ZiTDO'></bdo><ul id='ZiTDO'></ul>

          <small id='ZiTDO'></small><noframes id='ZiTDO'>

                    <tbody id='ZiTDO'></tbody>
                1. <tfoot id='ZiTDO'></tfoot>

                  <legend id='ZiTDO'><style id='ZiTDO'><dir id='ZiTDO'><q id='ZiTDO'></q></dir></style></legend>
                  本文介绍了Fabric.js - 自由绘制矩形的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有以下无法正常工作:

                  I have the following which doesn't work correctly:

                  var canvas = new fabric.Canvas('canvas');
                  
                  
                  canvas.observe('mouse:down', function(e) { mousedown(e); });
                  canvas.observe('mouse:move', function(e) { mousemove(e); });
                  canvas.observe('mouse:up', function(e) { mouseup(e); });
                  
                  
                  var started = false;
                  
                  
                  var x = 0;
                  var y = 0;
                  
                  
                  /* Mousedown */
                  function mousedown(e) {
                  
                      var mouse = canvas.getPointer(e.memo.e);
                  
                      started = true;
                  
                      x = mouse.x;
                      y = mouse.y;    
                  
                      var square = new fabric.Rect({ 
                  
                          width: 1, 
                          height: 1, 
                          left: mouse.x, 
                          top: mouse.y, 
                          fill: '#000'
                  
                      });
                  
                  
                      canvas.add(square); 
                      canvas.renderAll();
                      canvas.setActiveObject(square); 
                  
                  }
                  
                  
                  /* Mousemove */
                  function mousemove(e) {
                  
                      if(!started) {
                  
                          return false;
                  
                      }
                  
                      var mouse = canvas.getPointer(e.memo.e);
                  
                      var x = Math.min(mouse.x,  x),
                      y = Math.min(mouse.y,  y),
                      w = Math.abs(mouse.x - x),
                      h = Math.abs(mouse.y - y);
                  
                      if (!w || !h) {
                  
                          return false;
                  
                      }
                  
                      var square = canvas.getActiveObject(); 
                  
                      square.set('top', y).set('left', x).set('width', w).set('height', h);
                  
                      canvas.renderAll(); 
                  
                  }
                  
                  
                  /* Mouseup */
                  function mouseup(e) {
                  
                      if(started) {
                  
                          started = false;    
                  
                      }   
                  
                   }
                  

                  上面的逻辑来自一个简单的矩形绘图系统,我没有使用fabric.js,所以我知道它可以工作,只是没有fabric.js.

                  The above logic is from a simple rectangle drawing system I used without fabric.js so I know it works, just not with fabric.js.

                  似乎数学已关闭,或者我使用宽度/高度/x/y 值设置了不正确的参数,因为当您绘制矩形时没有正确跟随光标.

                  It seems the maths is off or I'm setting the incorrect params with the width/height/x/y values, as when you draw the rectangle does not follow the cursor correctly.

                  非常感谢任何帮助,在此先感谢 :)

                  Any help is much appreciated, thanks in advance :)

                  推荐答案

                  看起来 Fabric.js 从源头计算一切.所以,上"和左"有点误导.检查以下链接:画布坐标有偏移.另外,我已经更改了您的一些代码:

                  Looks like Fabric.js calculates everything from the origin. So, 'Top' and 'Left' are a bit misleading. Check the following link: Canvas Coordinates Have Offset. Also, I've changed a bit of your code:

                  var canvas = new fabric.Canvas('canvas');
                  canvas.observe('mouse:down', function(e) { mousedown(e); });
                  canvas.observe('mouse:move', function(e) { mousemove(e); });
                  canvas.observe('mouse:up', function(e) { mouseup(e); });
                  
                  var started = false;
                  var x = 0;
                  var y = 0;
                  
                  /* Mousedown */
                  function mousedown(e) {
                      var mouse = canvas.getPointer(e.memo.e);
                      started = true;
                      x = mouse.x;
                      y = mouse.y;
                  
                      var square = new fabric.Rect({ 
                          width: 0, 
                          height: 0, 
                          left: x, 
                          top: y, 
                          fill: '#000'
                      });
                  
                      canvas.add(square); 
                      canvas.renderAll();
                      canvas.setActiveObject(square); 
                  
                  }
                  
                  
                  /* Mousemove */
                  function mousemove(e) {
                      if(!started) {
                          return false;
                      }
                  
                      var mouse = canvas.getPointer(e.memo.e);
                  
                      var w = Math.abs(mouse.x - x),
                      h = Math.abs(mouse.y - y);
                  
                      if (!w || !h) {
                          return false;
                      }
                  
                      var square = canvas.getActiveObject(); 
                      square.set('width', w).set('height', h);
                      canvas.renderAll(); 
                  }
                  
                  /* Mouseup */
                  function mouseup(e) {
                      if(started) {
                          started = false;
                      }
                  
                      var square = canvas.getActiveObject();
                  
                      canvas.add(square); 
                      canvas.renderAll();
                   } 
                  

                  这篇关于Fabric.js - 自由绘制矩形的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:HTML5 Canvas 中的取消绑定功能 下一篇:简单游戏的 Canvas vs SVG

                  相关文章

                    <i id='dsqHb'><tr id='dsqHb'><dt id='dsqHb'><q id='dsqHb'><span id='dsqHb'><b id='dsqHb'><form id='dsqHb'><ins id='dsqHb'></ins><ul id='dsqHb'></ul><sub id='dsqHb'></sub></form><legend id='dsqHb'></legend><bdo id='dsqHb'><pre id='dsqHb'><center id='dsqHb'></center></pre></bdo></b><th id='dsqHb'></th></span></q></dt></tr></i><div id='dsqHb'><tfoot id='dsqHb'></tfoot><dl id='dsqHb'><fieldset id='dsqHb'></fieldset></dl></div>

                    <small id='dsqHb'></small><noframes id='dsqHb'>

                  1. <tfoot id='dsqHb'></tfoot>
                    <legend id='dsqHb'><style id='dsqHb'><dir id='dsqHb'><q id='dsqHb'></q></dir></style></legend>

                        <bdo id='dsqHb'></bdo><ul id='dsqHb'></ul>