首页 > 解决方案 > FabricJs Canvas 'Mouse:over' 事件不起作用

问题描述

我正在尝试在 FabricJS( version:1.4.0 ) 画布上监听 mouse:over 事件,但它似乎没有像我预期的那样工作。这是片段

const canvas = new fabric.Canvas('gameCanvas', {selection: false});

const rect = new fabric.Rect({
    left: 120,
    top: 30,
    width: 100,
    height: 100,
    fill: 'green',
    angle: 20,
    name: 'Rectangle',
    hoverCursor: 'pointer'
});

canvas.add(rect);
canvas.renderAll();

$('.upper-canvas').mouseover(function (e)
{
     
     if(e.target !== null)
     {
        if(e.target.name === 'Rectangle')
       {
          e.target.set('fill', 'red');
          canvas.renderAll();
          console.log('mouse:over', e.target.name);
       }
     } 

});

$('.upper-canvas').mouseout(function (e)
{
    if(e.target !== null){
      e.target.set('fill', 'green');
      canvas.renderAll();
      console.log('mouse:out', e.target.name);
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.4.0/fabric.min.js"></script>
<canvas id="gameCanvas" width="500" height="300" style="border: 2px solid green;"></canvas>

也添加了 mouse:out 事件和 canvas.renderAll() 函数来重新绘制画布。

标签: javascriptfabricjs

解决方案


1.5.0 更新日志

添加“mouse:over”和“mouse:out”画布事件(以及相应的“mouseover”、“mouseout”对象事件)。

在 1.5.0 之前实际上没有此类事件。


推荐阅读