Моя цель - предотвратить перекрытие двух или более прямоугольников внутри моего холста FabricJS.
Представьте себе два прямоугольника, имеющих информацию о положении и размере, и вы можете перетаскивать любой прямоугольник внутри холста.
Если прямоугольник A приближается к прямоугольнику B, позиция прямоугольника A должна привязываться к краю прямоугольника B. Это должно работать для любого края прямоугольника B. Вершины не должны совпадать, вызывать размеры прямоугольники являются переменными.
У меня есть рабочий пример для этого привязки на одном измерении (оси x).
Моя лучшая попытка jsfiddle
См. jsfiddle.
Но мне нужно, чтобы он работал вокруг прямоугольника в обоих измерениях. Я уверен, что мой код недостаточно эффективен для управления этим.
Кодовые фрагменты, которые могут помочь:
object.oCoords.tl.x //top-left corner x position. similar goes for top-right (tr), bottom-left (bl), bottom-right (br) and .y for y-position
mouse_pos = canvas.getPointer(e.e);
mouse_pos.x //pointer x.position
mouse_pos.y //pointer y.position
object.intersectsWithObject(targ) // object = dragged rectangle, targ = targeted rectangle
Привязка должна работать для неограниченного количества объектов (не только для двух прямоугольников).