账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Fabric.js setCoords 如何取消?
    • 2017-10-20 00:00
    • 10
    42
    0

    我想做個功能,預設可以拖拉多個圖型,可點擊 button html 鈕切換操作拖拉的圖型或是操作圖型

    目前我已完成 拖拉圖型、切換操作圖型功能
    但不知如何切換回拖拉圖型的模式

    我是使用此方式切換至操作圖型模式:
    var ignoreZoom = true, skipAbsolute = true;

                        canvas.forEachObject(function(o) {
                            o.setCoords(ignoreZoom, skipAbsolute);
                        });
    

    此寫法無法切換回圖型拖拉模式:
    var ignoreZoom = false, skipAbsolute = false;

                        canvas.forEachObject(function(o) {
                            o.setCoords(ignoreZoom, skipAbsolute);
                        });
    

    我的程式碼如下:
    <html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <script src="js/jquery-1.9.1.min.js"></script>
        <script src="js/fabric.min.js"></script>
    
        <style>
            body {
                background-color: ivory;
                padding:0px;
            }
    
            #canvas {
                border: 1px solid blue;
            }
    
        </style>
    
        <script>
            $(function() {
                var canvas = new fabric.Canvas('paper', { selection: false });
                var circle, isDown, origX, origY;
                var controlMode = 'draw';
    
                $("#selec").click(function() {
    
                    if(controlMode == 'draw') {
                        // canvas.isDrawingMode = false;
                        canvas.selection = true;
                        canvas.off('mouse:down');
                        canvas.off('mouse:move');
                        canvas.off('mouse:up');
                        // canvas.forEachObject(function(o) { o.setCoords(); });
    
                        var ignoreZoom = true, skipAbsolute = true;
                        canvas.forEachObject(function(o) {
                            o.setCoords(ignoreZoom, skipAbsolute);
                        });
    
                        controlMode = 'select';
    
                        $('#selec').html('Draw Mode');
                    } else {
                        canvas.selection = false;
                        canvas.on('mouse:down');
                        canvas.on('mouse:move');
                        canvas.on('mouse:up');
    
                        var ignoreZoom = false, skipAbsolute = false;
                        canvas.forEachObject(function(o) {
                            o.setCoords(ignoreZoom, skipAbsolute);
                        });
    
                        controlMode = 'draw';
    
                        $('#selec').html('Selection Mode');
                    }
                });
    
                canvas.observe('mouse:down', function(o) {
                    isDown = true;
                    var pointer = canvas.getPointer(o.e);
                    origX = pointer.x;
                    origY = pointer.y;
                    circle = new fabric.Circle({
                        left: pointer.x,
                        top: pointer.y,
                        radius: 1,
                        strokeWidth: 1,
                        stroke: 'black',
                        fill: 'white',
                        selectable: true,
                        originX: 'center', originY: 'center'
                    });
                    canvas.add(circle);
                });
    
                canvas.observe('mouse:move', function(o) {
                    if(!isDown) {
                        return;
                    }
                    var pointer = canvas.getPointer(o.e);
                    circle.set({ radius: Math.abs(origX - pointer.x) });
                    canvas.renderAll();
                });
    
                canvas.on('mouse:up', function(o) {
                    isDown = false;
                });
    
            });
        </script>
    </head>
    <body>
        <canvas id="paper" width="400" height="400" style="border:1px solid #ccc"></canvas>
        <button id="selec">Selection Mode</button>
    </body>

    </html>

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • ミ长发小鹿纯▽\ 普通会员 1楼

      在 Fabric.js 中,你可以使用 setcoords 方法来设置元素的坐标,然后使用 removecoords 方法来取消设置。但是,setcoords 方法默认情况下不会取消已设置的坐标。

      以下是一个示例,展示了如何使用 setcoords 方法来设置元素的坐标,然后使用 removecoords 方法来取消设置:

      ```javascript var element = document.getElementById('myElement');

      element.style.left = '100px'; element.style.top = '100px';

      var coords = element.style.coords; console.log(coords); // 输出:left: 100px top: 100px

      element.style.coords = undefined; console.log(coords); // 输出:undefined ```

      在这个示例中,我们首先设置了元素的 lefttop 坐标,然后使用 coords 属性存储了这些坐标。然后,我们使用 removecoords 方法取消了这些坐标。最后,我们再次使用 coords 属性来获取这些坐标,但它们已经被取消。

      请注意,setcoords 方法不会删除已设置的坐标,而是将它们存储在 coords 属性中,但不改变它们的值。如果你需要取消已设置的坐标,你应该使用 removecoords 方法。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部