Существует большой учебник Selecting Multiple Objects with KineticJS, в котором описано, как создать поле выбора в HTML-холсте, чтобы выбрать несколько объектов, но автор Michelle Higgins написал свой код, чтобы выбрать объект, охваченный полем выбора.Как сделать поле выбора в Canvas для выбора любого объекта, к которому он касается не только объектов, которые он охватывает?
Следующий код JavaScript выражает алгоритм:
var pos = rectSel.getAbsolutePosition();
//get the extents of the selection box
var selRecXStart = parseInt(pos.x);
var selRecXEnd = parseInt(pos.x) + parseInt(rectSel.attrs.width);
var selRecYStart = parseInt(pos.y);
var selRecYEnd = parseInt(pos.y) + parseInt(rectSel.attrs.height);
//get the extents of the group to compare to
var grpXStart = parseInt(grp.attrs.x);
var grpXEnd = parseInt(grp.attrs.x) + parseInt(grp.attrs.width);
var grpYStart = parseInt(grp.attrs.y);
var grpYEnd = parseInt(grp.attrs.y) + parseInt(grp.attrs.height);
//Are we inside the selction area?
if ((selRecXStart <= grpXStart && selRecXEnd >= grpXEnd) &&
(selRecYStart <= grpYStart && selRecYEnd >= grpYEnd))
{
if (arSelected.indexOf(grp.getName()) < 0)
{
arSelected.push(grp.getName());
var tmpX = parseInt(grp.attrs.x);
var tmpY = parseInt(grp.attrs.y);
var rectHighlight = new Kinetic.Rect({
x: tmpX,
y: tmpY,
height: grp.attrs.height,
width: grp.attrs.width,
fill: 'transparent',
name: 'highlightBlock',
stroke: '#41d6f3',
strokeWidth: 3
});
layer.add(rectHighlight);
}
}
Вопрос: Как сделать окно выбора, чтобы выбрать какой-либо объект, он затрагивает не только объекты, она включает в себя?
P.S: Работает jsbin.
Я знаю, что есть Konvajs, что является новым в Kineticjs –
я только нужна логика –