如何使用鼠标中键禁用拖动选择?

How to disable drag selection with middle mouse button?

转到 kitchensink,使用鼠标中键,尝试在 canvas 的空白区域单击并按住鼠标并移动鼠标。

显示选择矩形。如何禁用它?我问是因为,在以前版本的 fabric 中,我有鼠标中键单击和拖动绑定到 canvas 平移。升级到新版本,canvas 出现意外行为。


如果 event.button == 1,我尝试通过在 mousedown 中执行 canvas.selectable = false; 并在 mouseup 事件处理程序中将其设置为 true 来禁用鼠标按下时 canvas 的选择。

那没用。

关于如何使用鼠标中键单击并拖动禁用选择的任何想法?

Prasanth,你的问题很简单。你有错字。尝试这样使用:

canvas.selection = false;

这是您可以尝试的代码:

canvas.on('mouse:down',function(e){
    canvas.selection = true;
});
canvas.on('mouse:down',function(e){
  if( e.e.button == 1 ) {
    canvas.selection = false;
  };
});

问题是 fabric 最近启用了点击其他按钮而不是离开。 重点是左边处理了,右边处理了,中间没... 我猜中间的按钮跟左边的按钮一样,只是因为它不是右边的。

这里是 1.7.3 版 fabric 的 mousedown 处理函数的片段(当前为 2017 年 2 月)。

 __onMouseDown: function (e) {

      var target = this.findTarget(e);

  // if right click just fire events
  var isRightClick  = 'which' in e ? e.which === 3 : e.button === 2;
  if (isRightClick) {
    if (this.fireRightClick) {
      this._handleEvent(e, 'down', target ? target : null);
    }
    return;
  }

  ... continue normal flow ...

所以这需要适当的修复。

按照建议发布自定义事件是一个补丁,但通常这根本不应该发生。 (因为我是项目的维护者,所以我要解决这个问题)