【发布时间】:2020-01-17 12:07:00
【问题描述】:
我正在尝试在 FabricJS(version:1.4.0) 画布上监听 mouse:over 事件,但它似乎没有像我预期的那样工作。这是sn-p
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() 函数来重新绘制画布。
【问题讨论】:
-
我记得有一个类似的问题。这可能是因为fabric js 在画布上放置了一个元素。您想收听该元素上的事件。
.upper-canvas -
在 .upper-canvas 上收听是什么意思?
-
Fabric js 在原始的 canvas 元素上放置了一个 canvas 元素,类为
upper-canvas。它阻止点击事件对其下的元素起作用。 -
如何将事件附加到upper-canvas下的元素?
-
我不确定。我可能会把你引向错误的方向。当我阅读他们的文档时。您拥有的解决方案应该有效。 fabricjs.com/hovering
标签: javascript fabricjs