나는 아래에 쌓여 있고 (완전히) 다른 물체로 덮여있는 물체를 선택하는 방법을 개발하려고합니다. 하나의 아이디어는 상단 개체를 선택한 다음 doubleclick
을 통해 레이어를 아래쪽으로 이동하는 것입니다. 이것은 내가 지금 무엇을 가지고 있습니다 : 당신이 볼 수 있듯이, blue
하나 내에서 red
사각형을 선택하려고하면 작동하지 않습니다fabric에서 마우스를 통해 피사체를 선택하는 방법은 무엇입니까?
var canvas = new fabric.Canvas("c");
fabric.util.addListener(canvas.upperCanvasEl, "dblclick", function (e) {
var _canvas = canvas;
var _mouse = _canvas.getPointer(e);
var _active = _canvas.getActiveObject();
if (e.target) {
var _targets = _canvas.getObjects().filter(function (_obj) {
return _obj.containsPoint(_mouse);
});
//console.warn(_targets);
for (var _i=0, _max=_targets.length; _i<_max; _i+=1) {
//check if target is currently active
if (_targets[_i] == _active) {
\t //then select the one on the layer below
\t _targets[_i-1] && _canvas.setActiveObject(_targets[_i-1]);
break;
}
}
}
});
canvas
.add(new fabric.Rect({
top: 25,
left: 25,
width: 100,
height: 100,
fill: "red"
}))
.add(new fabric.Rect({
top: 50,
left: 50,
width: 100,
height: 100,
fill: "green"
}))
.add(new fabric.Rect({
top: 75,
left: 75,
width: 100,
height: 100,
fill: "blue"
}))
.renderAll();
canvas {
border: 1px solid;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.3/fabric.min.js"></script>
<canvas id="c" width="300" height="200"></canvas>
. green
또는 blue
만 선택할 수 있습니다. 첫 번째 doubleclick
(green
선택)을 클릭 한 후 다시 클릭하면 blue
이 선택되어 다음 더블 클릭으로 green
만 다시 수신 할 수 있다고 추측합니다.
이 방법이 있습니까? 다른 아이디어?
** "어떤 다른 아이디어?"** FabricJS 여러 계층 사각형의 시험을 치면 물론, 단지의 구형을 반복하고 mouseX 경우 수학적으로 테스트, 준비되지 않은 , mouseY는 rect 안에 있습니다. 이 Html5-Canvas보기 [문서 예제] (http://stackoverflow.com/documentation/html5-canvas/5017/collisions-and-intersections/17716/is-an-xy-point-inside-a-rectangle#t= 201608240434175724158). 이렇게하면 클릭 수 및 더블 클릭 및 트리플 클릭 등을 조정할 필요가 없습니다. – markE
@markE : 내 문제를 해결하지 못합니다. 나는 이미 어떤 객체가 마우스 포인터에 의해 눌려 졌는지를 알고있다. (위 코드의'_targets'). 다른 사람들이 다루는 대상을'선택 '하는 메커니즘이 필요합니다. 그리고 하나는 아래에, 등등. – Fidel90
저는 FabricJS 전문가가 아니지만 'fabric.Group'을 사용하여 객체 그룹을 선택할 수 없습니까? 'var group = new fabric.Group(); group.addWithUpdate (targetObject); canvas.setActiveObject (그룹); canvas.add (그룹); – markE