如何模拟鼠标松开事件fabric js

How to simulate mouse up event fabric js

我正在开发一个需要模拟 mouseup 事件的项目。这应该像这样工作:

我点击canvas绘制或拖动对象,超时后我想处理mouseup事件。我怎样才能做到这一点?

我的代码笔example

谢谢

var canvas = this.__canvas = new fabric.Canvas('c');
  
canvas.add(new fabric.Rect({ top: 100, left: 100, width: 50, height: 50, fill: '#f55' }),
            new fabric.Circle({ top: 140, left: 130, radius: 75, fill: 'green' }),
            new fabric.Triangle({ top: 100, left: 110, width: 100, height: 100, fill: 'blue' }))

document.addEventListener('keydown', (e) => {

  if (e.code == 'AltLeft') {
    canvas.isDrawingMode = !canvas.isDrawingMode;
  }
});

setTimeout(()=> {
  console.log('Must handle mouseup event here')
},5000)
canvas {
  border: 1px solid black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/3.6.1/fabric.min.js"> </script>

<canvas id="c" width="300" height="300"></canvas>

此处描述了创建编程鼠标事件: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent

生成类型为 mouseup 的事件,然后将其调度到 canvas 上层,您可以使用 canvas.upperCanvasEl.

var canvas = this.__canvas = new fabric.Canvas('c');
  
canvas.add(new fabric.Rect({ top: 100, left: 100, width: 50, height: 50, fill: '#f55' }),
            new fabric.Circle({ top: 140, left: 130, radius: 75, fill: 'green' }),
            new fabric.Triangle({ top: 100, left: 110, width: 100, height: 100, fill: 'blue' }))

document.addEventListener('keydown', (e) => {

  if (e.code == 'AltLeft') {
    canvas.isDrawingMode = !canvas.isDrawingMode;
  }
});

setTimeout(()=> {
  console.log('Must handle mouseup event here');
  var evt = new MouseEvent("mouseup", {
    bubbles: true,
    cancelable: true,
    view: window
  });
  canvas.upperCanvasEl.dispatchEvent(evt);
},5000)
canvas {
  border: 1px solid black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/3.6.1/fabric.min.js"> </script>

<canvas id="c" width="300" height="300"></canvas>