Есть ли способ сложить объекты на холсте Fabric.js через официальный API? Прямо сейчас единственный способ, которым я нашел это, - это вручную выполнить итерацию через canvas._objects и переупорядочить их, чтобы они рисовались в определенном порядке. Есть ли лучший способ сделать это, который не (потенциально) разрушает объект?Многослойные объекты холста в Fabric.js
ответ
[Изменить] Я исправил свою информацию ниже (мой плохой, я изначально думал о KineticJs api).
FabricJS имеет следующие методы API, которые изменяют Z-индекс объектов:
canvas.sendBackwards(myObject)
canvas.sendToBack(myObject)
canvas.bringForward(myObject)
canvas.bringToFront(myObject)
Под крышками, FabricJs изменяет Z-индекс путем удаления объекта из GetObjects() массива и сплайсинга его обратно в желаемое положение. Он имеет хорошую оптимизацию, которая проверяет пересекающиеся объекты.
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();
},
шаг 1: Вы можете использовать preserveObjectStacking: true
шаг 2: используйте SendToBack, sendtofront .... fabricjs варианты как ниже
Если вы хотите установить конкретный упорядочивая для всех объектов, вместо того, чтобы перемещать один объект вперед/назад, итерационные вызовы для приведения/отправки на фронт/назад медленны.
Вы можете использовать код из bringToFront
как вдохновение, чтобы ускорить этот случай использования до: https://github.com/kangax/fabric.js/blob/586e61dd282b22c1d50e15c0361875707e526fd8/src/static_canvas.class.js#L1468
И сделать это:
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. Данные холста Export fabric.js
- 3. fabric.js ... как центр холста
- 4. Добавление сетки поверх холста Fabric.js
- 5. Z-index Объекты Fabric.js
- 6. Взаимные объекты fabric.js
- 7. Шрифт в библиотеке fabric.js для холста HTML5
- 8. Два холста друг на друга в Fabric.js
- 9. Проверьте, нет ли холста в Fabric.js
- 10. Как удалить оверлейное изображение из холста Fabric.js?
- 11. Как сделать центр холста fabric.js равным 0,0?
- 12. Fabric.js: Как применить фильтр для всего холста?
- 13. Как удалить SVG из холста Fabric.js?
- 14. Многослойные UIScrollView
- 15. Слои в холсте fabric.js
- 16. Как деактивировать все объекты в Fabric.js
- 17. как выбрать и перетащить объекты в fabric.js
- 18. Многоуровневые многослойные холсты в WPF
- 19. Многослойные фрагменты в viewpager
- 20. Многослойные холсты и события click (Createjs)
- 21. Fabric.js: вид спереди и сзади
- 22. Пиксельное идеальное масштабирование изображений при масштабировании холста с помощью fabric.js
- 23. Многослойные холсты HTML5 Высота/ширина Сброс до 300x150px
- 24. Как изменить динамическое положение экземпляра холста, созданного в Fabric.js
- 25. Fabric.js: как сгруппировать объекты, используя только addWithUpdate()
- 26. Выбрать Все объекты на холсте, используя Fabric.js
- 27. Добавить объекты и сохранить изображение C# fabric.js
- 28. fabric.js ошибка в рельсах
- 29. Как сохранить созданные объекты холста
- 30. Параметризированные многослойные апартаменты
Спасибо! Это сэкономит мне массу неприятностей. – Zwade
does fabricjs имеет встроенную индексную систему стека объектов ... тогда я мог бы сделать что-то вроде 'var idx = some_object.get_zIndex()' – dsdsdsdsd
Вы можете получить z-index: canvas.getObjects(). IndexOf (some_object) , Доступны четыре команды для изменения порядка укладки: some_object.sendBackwards(), some_object.sendToBack(), some_object.bringForward() и some_object.bringToFront(). – markE