【问题标题】:unable to move fabricjs object无法移动fabricjs对象
【发布时间】:2017-11-17 17:44:53
【问题描述】:

var canvas = new fabric.Canvas('canvas');
canvas.selection = false;
var circle = new fabric.Circle({
    left: 150,
    top: 150,
    radius: 50,
    originX: 'center',
    originY: 'center',
    selectable: false
});
canvas.add(circle);
circle.on('mousedown',function(){
 console.log('down')
 circle.set({
  selectable: true
 })
 canvas.renderAll();
})
circle.on('mouseout',function(){
 console.log('out')
  circle.set({
  selectable: false
 })
 canvas.renderAll();
})
canvas {
  border: 2px dotted green;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.16/fabric.min.js" charset="utf-8"></script>
<canvas id="canvas" width="400" height="400"></canvas>

我想在鼠标按下时创建对象selectable,在鼠标移出时我想创建not selectable。如果我点击里面并拖动它不动。但是如果我在里面点击两次以上,它就可以工作了。但我想让这项工作点击一次。如何达到同样的效果?

--更新--

正如@AndreaBogazzi 所建议的,它适用于桌面上的mouesmove,但同样不适用于触摸设备,因为如果我触摸对象,只有触摸启动才会起作用。

【问题讨论】:

    标签: javascript fabricjs


    【解决方案1】:

    只需删除控件和边框,使其只能拖动

    var canvas = new fabric.Canvas('canvas');
    canvas.selection = false;
    var circle = new fabric.Circle({
      left: 150,
      top: 150,
      radius: 50,
      originX: 'center',
      originY: 'center',
      selectable: true,
      hasControls: false,
      hasBorders: false
    });
    canvas.add(circle);
    canvas {
      border: 2px dotted green;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.16/fabric.min.js" charset="utf-8"></script>
    <canvas id="canvas" width="400" height="400"></canvas>

    【讨论】:

    • 我的场景是我想在圆圈的某个部分进行拖动,而不是在休息时拖动。我做到了。但问题是,如果我在其中多次单击它,它就会变得可选择,然后移动。不是点击一次。这就是我在 sn-p 中所反映的。
    【解决方案2】:

    这不能在fabricjs 中完成。 鼠标按下事件在选择逻辑已经执行后触发。

    您可以在mouseover 上选择它

    如果这对您有用,则它等于一个始终可选择的对象,除非您在 mousedown(或 mouseover)事件中运行自定义逻辑以使其在某些情况下可选择。

    var canvas = new fabric.Canvas('canvas');
    canvas.selection = false;
    var circle = new fabric.Circle({
        left: 150,
        top: 150,
        radius: 50,
        originX: 'center',
        originY: 'center',
        selectable: false
    });
    canvas.add(circle);
    circle.on('mouseover',function(){
     console.log('over')
     circle.set({
      selectable: true
     })
     canvas.renderAll();
    })
    circle.on('mouseout',function(){
     console.log('out')
      circle.set({
      selectable: false
     })
     canvas.renderAll();
    })
    canvas {
      border: 2px dotted green;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.16/fabric.min.js" charset="utf-8"></script>
    <canvas id="canvas" width="400" height="400"></canvas>

    【讨论】:

    • 场景是,在触摸设备上,如果我触摸那个对象,它会使对象可选择,但不能移动。如果我第二次触摸,那么它会移动。我正在制作一些可拖动的部分,有些则不是。
    • 好的,请更新答案,因为这是一个缺失的重要细节
    猜你喜欢
    • 2017-02-02
    • 1970-01-01
    • 2019-04-08
    • 2018-09-07
    • 2017-05-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多