【问题标题】:Fabricjs - How to move the selected object by keyboardFabricjs - 如何通过键盘移动选定的对象
【发布时间】:2021-02-22 07:58:19
【问题描述】:

我想用键盘移动选中的对象,因为可以更准确地移动,我不知道怎么做。

【问题讨论】:

    标签: fabricjs


    【解决方案1】:

    这是我使用左/上/右/下键移动选定对象/组的简单实现:

    https://jsfiddle.net/milanhlinak/4fofjzvm/

    <!DOCTYPE html>
    <html>
    
    <head>
        <script type="text/javascript" src="lib/jquery-3.1.1.min.js"></script>
        <script type="text/javascript" src="lib/fabric.min.js"></script>
    </head>
    
    <body>
    
        <canvas id="canvas" style="border: 1px solid #cccccc"></canvas>
    
        <script>
            const STEP = 10;
    
            var Direction = {
                LEFT: 0,
                UP: 1,
                RIGHT: 2,
                DOWN: 3
            };
    
            var canvas = new fabric.Canvas('canvas', {
                width: 500,
                height: 500,
            });
    
            canvas.add(new fabric.Rect({
                left: 100,
                top: 100,
                width: 50,
                height: 50,
                fill: '#faa'
    
            }));
            canvas.add(new fabric.Rect({
                left: 300,
                top: 300,
                width: 50,
                height: 50,
                fill: '#afa'
            }));
    
            fabric.util.addListener(document.body, 'keydown', function (options) {
                if (options.repeat) {
                    return;
                }
                var key = options.which || options.keyCode; // key detection
                if (key === 37) { // handle Left key
                    moveSelected(Direction.LEFT);
                } else if (key === 38) { // handle Up key
                    moveSelected(Direction.UP);
                } else if (key === 39) { // handle Right key
                    moveSelected(Direction.RIGHT);
                } else if (key === 40) { // handle Down key
                    moveSelected(Direction.DOWN);
                }
            });
    
            function moveSelected(direction) {
    
                var activeObject = canvas.getActiveObject();
                var activeGroup = canvas.getActiveGroup();
    
                if (activeObject) {
                    switch (direction) {
                    case Direction.LEFT:
                        activeObject.setLeft(activeObject.getLeft() - STEP);
                        break;
                    case Direction.UP:
                        activeObject.setTop(activeObject.getTop() - STEP);
                        break;
                    case Direction.RIGHT:
                        activeObject.setLeft(activeObject.getLeft() + STEP);
                        break;
                    case Direction.DOWN:
                        activeObject.setTop(activeObject.getTop() + STEP);
                        break;
                    }
                    activeObject.setCoords();
                    canvas.renderAll();
                    console.log('selected objects was moved');
                } else if (activeGroup) {
                    switch (direction) {
                    case Direction.LEFT:
                        activeGroup.setLeft(activeGroup.getLeft() - STEP);
                        break;
                    case Direction.UP:
                        activeGroup.setTop(activeGroup.getTop() - STEP);
                        break;
                    case Direction.RIGHT:
                        activeGroup.setLeft(activeGroup.getLeft() + STEP);
                        break;
                    case Direction.DOWN:
                        activeGroup.setTop(activeGroup.getTop() + STEP);
                        break;
                    }
                    activeGroup.setCoords();
                    canvas.renderAll();
                    console.log('selected group was moved');
                } else {
                    console.log('no object selected');
                }
    
            }
        </script>
    
    </body>
    
    </html>
    

    【讨论】:

      【解决方案2】:

      下面是一个简单的函数:

      <canvas id="canvas" onkeydown="onKeyDown" tabindex="0"></canvas>
      
      function onKeyDown(event) {
         const STEP = 1;
        // prevent scrolling
        event.preventDefault();
        let keyCode = event.keyCode || event.which;
        let activeGroup = this.canvas.getActiveObjects();
      
         if (Array.isArray(activeGroup)) {
           activeGroup.forEach(obj => {
             switch (keyCode) {
               case 37: // left
                 obj.left = obj.left - STEP;
                 break;
               case 38: // up
                 obj.top = obj.top - STEP;
                 break;
               case 39: // right
                 obj.left = obj.left + STEP;
                 break;
               case 40: // down
                 obj.top = obj.top + STEP;
                 break;
             }
             obj.setCoords();
           });
      
           this.canvas.renderAll();
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-08-17
        • 2017-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-03
        • 2015-03-22
        • 1970-01-01
        相关资源
        最近更新 更多