如何模拟鼠标向上事件结构js

问题描述 投票:0回答:1

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

我在画布上单击以绘制或拖动对象,并且在超时后,我想处理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>
javascript html5-canvas fabricjs
1个回答
0
投票

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

生成类型为mouseup的事件,然后将其分派到使用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>
© www.soinside.com 2019 - 2024. All rights reserved.