Fabric.js Guides/Bleed Lines

Използвам fabric.js за изграждане на редактор, който ще извежда изображения за печат. Това ще бъдат разпечатки с пълен ръб и имам нужда от начин да покажа полето за маркиране върху всичко останало на платното.

Най-доброто решение, което съм намерил досега, е просто да начертая 4 линии върху платното, но те постоянно се поставят зад други обекти и се забъркват с реда на подреждане на обектите.

Изглежда, че трябва да има просто решение за това. някакви мисли?

въведете описание на изображението тук


person BWDesign    schedule 17.08.2016    source източник
comment
моля, покажете вашия код   -  person alessandro    schedule 17.08.2016
comment
Не мисля, че имам код, който да е подходящ за въпроса. Търся алтернативен метод на това, което вече имам.   -  person BWDesign    schedule 17.08.2016


Отговори (1)


Така че най-добрият ви залог вероятно е да направите група от тези 4 реда и всеки път, когато добавяте нов обект към страницата, трябва също да изведете групата от редове отпред.

var canvas = new fabric.Canvas('c', { 
	selection: true,
  preserveObjectStacking: true,
});
window.canvas = canvas;

var line1 = new fabric.Line([
  10, 0,
  10, canvas.height
],{ 
  stroke: '#000', 
})
var line2 = new fabric.Line([
  canvas.width - 10, 0,
  canvas.width - 10, canvas.height
],{ 
  stroke: '#000', 
})
var line3 = new fabric.Line([
  0, 10,
  canvas.width, 10
],{ 
  stroke: '#000', 
})
var line4 = new fabric.Line([
  0, canvas.height - 10,
  canvas.width, canvas.height - 10
],{ 
  stroke: '#000', 
});

var group = new fabric.Group([
	line1,
  line2,
  line3,
  line4
]);
group.selectable = false;
group.evented = false;

canvas.add(group);

canvas.add(new fabric.Circle({ 
  left: 300, 
  top: 300, 
  radius: 50, 
  fill: '#9f9', 
  originX: 'left', 
  originY: 'top',
  centeredRotation: true
}));
group.bringToFront();
canvas {
    border: 1px solid #ccc;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.3/fabric.js"></script>

<canvas id="c" width="600" height="600"></canvas>

person StefanHayden    schedule 19.08.2016
comment
Вашето решение е много подобно на решението, което вече имам, само че не знаех за функцията за групиране. Надявах се на съвсем различен метод за рисуване на водачи върху платното (който не използва обекти), но ще ви дам отговора, ако няма алтернатива. - person BWDesign; 19.08.2016
comment
ръководствата за изграждане като разширение на плат може да са страхотна малка библиотека за пускане. Не знам как да го направя, без да имам след това в стека на обекта. - person StefanHayden; 19.08.2016
comment
Надявах се на някакво разширение. Вече инсталирах разширението за насоки за подравняване (github.com/kangax /fabric.js/blob/master/lib/), тъй като имаше подобна функционалност, но няма начин да начертаете статични водачи. Той показва динамични направляващи линии, които не са част от стека на обекта. - person BWDesign; 19.08.2016
comment
хубаво! дори не знаех, че това е там. - person StefanHayden; 19.08.2016
comment
@StefanHayden, като правя групата, имам проблеми, защото тази група получава цялата площ на платното и е предназначена да бъде пред всички обекти. Тогава имам проблеми с курсора и преместването на вътрешните обекти. Между другото, правя: var group = new fabric.Group([line1,...], {selectable: false, hasControls: false, hasRotatingPoint: false, hoverCursor: 'not-allowed'}); - person Ricardo Carvalho; 30.05.2018
comment
TBH горното е най-умният начин: просто имайте специално маркирани обекти като линии (и други полезни неща) и ги управлявайте по съответния начин. Освен групи, можете да разгледате и колекции от пространства от имена. Алтернативата би била да разгледате възможността за използване на функцията за фоново/предно изображение на Fabric или да имате напълно отделен елемент ‹canvas› (отзад и отпред) от основното ‹canvas›... и в двата случая вие просто предизвиквате повече проблеми с управлението и производителността недостатъци. В крайна сметка не можете да избегнете аспекта на управлението; никой не знае какви реплики искаш освен теб. - person MarsAndBack; 12.07.2020