공식 API를 통해 Fabric.js 캔버스에 객체를 레이어하는 방법이 있습니까? 지금 내가 찾은 유일한 방법은 canvas._objects를 수동으로 반복하고 특정 순서로 그려 지도록 순서를 바꾸는 것입니다. 객체를 깰 가능성이없는 더 나은 방법이 있습니까?Fabric.js에서 캔버스 객체 레이어하기
18
A
답변
36
[편집] 아래 정보를 수정했습니다. (원래 KineticJs API를 생각하고있었습니다.)
FabricJS 개체의 z 인덱스 변경이 API 메소드 가지고 내부적
canvas.sendBackwards(myObject)
canvas.sendToBack(myObject)
canvas.bringForward(myObject)
canvas.bringToFront(myObject)
를 FabricJs)을합니다 (getObjects 오브젝트로부터 오브젝트를 제거 다시 배열하고 접합하여에 의해 Z- 색인 변경 원하는 위치. 교차하는 객체를 검사하는 멋진 최적화가 있습니다.
bringForward: function (object) {
var objects = this.getObjects(),
idx = objects.indexOf(object),
nextIntersectingIdx = idx;
// if object is not on top of stack (last item in an array)
if (idx !== objects.length-1) {
// traverse up the stack looking for the nearest intersecting object
for (var i = idx + 1, l = this._objects.length; i < l; ++i) {
var isIntersecting = object.intersectsWithObject(objects[i]) ||
object.isContainedWithinObject(this._objects[i]) ||
this._objects[i].isContainedWithinObject(object);
if (isIntersecting) {
nextIntersectingIdx = i;
break;
}
}
removeFromArray(objects, object);
objects.splice(nextIntersectingIdx, 0, object);
}
this.renderAll();
},
0
1 단계 : 당신은 preserveObjectStacking: true
2 단계를 사용할 수 있습니다 : 특정을 설정하려면 다음 sendtoback 사용 sendtofront .... 아래
1
같은 옵션을 fabricjs 모든 객체에 대한 순서 지정, 하나의 객체를 앞뒤로 이동하는 대신 전면/후면으로 가져 오거나 보내기위한 반복 호출이 느립니다. https://github.com/kangax/fabric.js/blob/586e61dd282b22c1d50e15c0361875707e526fd8/src/static_canvas.class.js#L1468
을 그리고이 수행 :
당신은 영감을bringToFront
의 코드를 사용할 수 있습니다
이 사용 사례를 속도를 정의 비교
fabric.Canvas.prototype.orderObjects = function(compare) {
this._objects.sort(compare);
this.renderAll();
}
을 정렬 같은 :
function compare(x,y) {
return x.getWidth() * x.getHeight() < y.getWidth() * y.getHeight();
}
some_canvas.orderObjects(compare)
작은 물체를 앞으로 가져오고 싶다면.
관련 문제
- 1. Fabric.js에서 캔버스 수정 이벤트가 있습니까?
- 2. Fabric.js에서 JSON 객체 비 직렬화
- 3. Fabric.js에서 하나의 객체 만 문자열 화합니다.
- 4. ASP.NET MVC 애플리케이션 레이어하기
- 5. Fabric.js에서 캔버스 객체의 최대 너비와 높이를 제한하는 방법
- 6. Fabric.js에서 canvas를 HTML로 내보내는 방법은 무엇입니까?
- 7. JavaScript 캔버스 객체
- 8. 캔버스 깊이 객체 그리기
- 9. Tkinter 캔버스 객체 저장
- 10. 캔버스 및 객체
- 11. 캔버스 블록 캔버스 객체 움직임에 대한 이미지
- 12. fabric.js에서 canvas 대신 css3을 사용하여 렌더링
- 13. Fabric.js에서 호를 그리는 법
- 14. Fabric.js에서 텍스트 글꼴 변경
- 15. fabric.js에서 모서리 채우기 변경
- 16. Fabric.js에서 stateProperties 확장
- 17. Fabric.js에서 커서 색상 변경
- 18. 캔버스 및 객체 용 Coronos
- 19. fabric.js 캔버스 객체 크기 조정
- 20. HTML 캔버스 객체 선택 방지
- 21. 캔버스 용 객체 지향 JavaScript
- 22. HTML5 캔버스 거리와 이동 객체
- 23. fabric.js에서 객체의 선택 스타일을 변경하십시오.
- 24. fabric.js에서 마우스 좌표를 표시하는 방법
- 25. 스크린보다 높은 DPI에서 캔버스 객체 생성하기?
- 26. Phonegap 하드웨어 가속 - 2 캔버스 객체
- 27. 캔버스 동적 점에 대한 객체 회전
- 28. 자바 스크립트/HTML5 - 캔버스 선택한 객체 치수
- 29. Kivy의 id로 캔버스 객체 속성 설정하기
- 30. html5 캔버스 객체 충돌 및 물리계
감사합니다. 이것은 저에게 많은 문제를 저장합니다. – Zwade
fabricjs는 내장 된 객체 스택 인덱스 시스템을 가지고 있습니다 ... 그렇다면'var idx = some_object.get_zIndex()'와 같은 것을 할 수 있습니다 – dsdsdsdsd
Z- 인덱스를 얻을 수 있습니다 : canvas.getObjects(). indexOf (some_object) . 스태킹 순서를 변경하는 데 사용할 수있는 명령은 some_object.sendBackwards(), some_object.sendToBack(), some_object.bringForward() 및 some_object.bringToFront()입니다. – markE