Pull to refresh

Создание соединительных стрелок для блочных элементов используя canvas

Reading time2 min
Views13K
arrows_for_blocksЗдравствуйте!

Недавно появилась необходимость сделать простое иерархическое дерево для web страницы (структура организации). Блоки получились неплохие, но когда пришло время соединить все стрелками, возник вопрос – как? Решение было два: рисовать стрелки в .png или же использовать спецсимволы.

Но хотелось чего-то более быстрого, удобного, современного – т.е. просто указать: стрелка от блока А к блоку Б. Уже к вечеру была написана небольшая библиотека, позволяющая реализовывать задуманное…

Реализация

Реализация проста и удобна, как и планировалось; технически это происходит в два шага:
  • arrow_initialize( divid, newcanvasid);
    создает новый canvas для отрисовки стрелок на заднем фоне (в родительском блоке);
  • arrow(canvasid, div1, div1side, div2, div2side, color, lineWidth, shadowColor, shadowBlur);
    рассчитываем координаты начала и конца стрелки исходя из id заданных блоков и выводим стрелку на заранее созданный canvas;

Недостатки:

На текущий момент проблем обнаружил несколько:
  • например созданный canvas перекрывает текст размещенный в блоках (он становится недоступным везде кроме Opera) – бился с z-index – не помогло;
  • так же в Firefox происходит небольшое смещение canvas.

Естественно, при перемещении (или анимации) блоков относительно фона – стрелки останутся на месте.

В заключении:

Все пока довольно сыро, поэтому носит статус beta, если у Вас есть предложения то с радостью «pull request» на guthub.

Примеры использования и более подробно можно посмотреть здесь.

design_canvas_arrows

Так же похожий, интересный способ построения блочных схем показан здесь — используется короткий стиль написания, в нашем же случае, мы не ограничиваемся простыми блок схемами, а соединяем или указываем на все, что хотим, другие блоки, параграфы, рисунки и т.д. используя при этом canvas.

Спасибо за внимание!
Tags:
Hubs:
+37
Comments10

Articles

Change theme settings