【发布时间】:2014-02-25 23:54:21
【问题描述】:
只有当鼠标在形状本身而不是在包含它的假想正方形上时,是否可以在 Fabric.js 中捕获 object:over?
我有一个jsFiddle demo,其中包含一个 U 形。您可以看到,即使我在 U 内有指针并且没有触及任何线,它仍然会将其检测为 object:over 事件。
Javascript:
var canvas = new fabric.Canvas("c1", {
isDrawingMode: false
});
canvas.loadFromJSON(objectsJson, function () {
canvas.renderAll();
});
canvas.on("object:over", function () {
console.log("object over");
});
canvas.on("object:out", function () {
console.log("object out");
});
// code to capture mouse over object while isDrawingMode = false
canvas.findTarget = (function (originalFn) {
return function () {
var target = originalFn.apply(this, arguments);
if (target) {
if (this._hoveredTarget !== target) {
canvas.fire('object:over', { target: target });
if (this._hoveredTarget) {
canvas.fire('object:out', { target: this._hoveredTarget });
}
this._hoveredTarget = target;
}
}
else if (this._hoveredTarget) {
canvas.fire('object:out', { target: this._hoveredTarget });
this._hoveredTarget = null;
}
return target;
};
})(canvas.findTarget);
【问题讨论】:
-
您需要
perPixelTargetFind和targetFindTolerance(请参阅此演示 - fabricjs.com/per-pixel-drag-drop) -
@kangax:完美!虽然我认为
targetFindTolerance仅在元素“内部”起作用,而不在外部起作用。我已将其设置为 100,但仅在我“触摸”对象时仍会激活。顺便说一句,非常祝贺你所做的这个很棒的项目。它开箱即用!太棒了 -
完美!很高兴你喜欢它
标签: javascript jquery html5-canvas fabricjs