Здравствуйте!
Недавно появилась необходимость сделать простое иерархическое дерево для web страницы (структура организации). Блоки получились неплохие, но когда пришло время соединить все стрелками, возник вопрос – как? Решение было два: рисовать стрелки в .png или же использовать спецсимволы.
Но хотелось чего-то более быстрого, удобного, современного – т.е. просто указать: стрелка от блока А к блоку Б. Уже к вечеру была написана небольшая библиотека, позволяющая реализовывать задуманное…
Реализация проста и удобна, как и планировалось; технически это происходит в два шага:
На текущий момент проблем обнаружил несколько:
Естественно, при перемещении (или анимации) блоков относительно фона – стрелки останутся на месте.
Все пока довольно сыро, поэтому носит статус beta, если у Вас есть предложения то с радостью «pull request» на guthub.
Примеры использования и более подробно можно посмотреть здесь.
Так же похожий, интересный способ построения блочных схем показан здесь — используется короткий стиль написания, в нашем же случае, мы не ограничиваемся простыми блок схемами, а соединяем или указываем на все, что хотим, другие блоки, параграфы, рисунки и т.д. используя при этом canvas.
Спасибо за внимание!
Недавно появилась необходимость сделать простое иерархическое дерево для web страницы (структура организации). Блоки получились неплохие, но когда пришло время соединить все стрелками, возник вопрос – как? Решение было два: рисовать стрелки в .png или же использовать спецсимволы.
Но хотелось чего-то более быстрого, удобного, современного – т.е. просто указать: стрелка от блока А к блоку Б. Уже к вечеру была написана небольшая библиотека, позволяющая реализовывать задуманное…
Реализация
Реализация проста и удобна, как и планировалось; технически это происходит в два шага:
создает новый canvas для отрисовки стрелок на заднем фоне (в родительском блоке);arrow_initialize( divid, newcanvasid);
рассчитываем координаты начала и конца стрелки исходя из id заданных блоков и выводим стрелку на заранее созданный canvas;arrow(canvasid, div1, div1side, div2, div2side, color, lineWidth, shadowColor, shadowBlur);
Недостатки:
На текущий момент проблем обнаружил несколько:
- например созданный canvas перекрывает текст размещенный в блоках (он становится недоступным везде кроме Opera) – бился с z-index – не помогло;
- так же в Firefox происходит небольшое смещение canvas.
Естественно, при перемещении (или анимации) блоков относительно фона – стрелки останутся на месте.
В заключении:
Все пока довольно сыро, поэтому носит статус beta, если у Вас есть предложения то с радостью «pull request» на guthub.
Примеры использования и более подробно можно посмотреть здесь.
Так же похожий, интересный способ построения блочных схем показан здесь — используется короткий стиль написания, в нашем же случае, мы не ограничиваемся простыми блок схемами, а соединяем или указываем на все, что хотим, другие блоки, параграфы, рисунки и т.д. используя при этом canvas.
Спасибо за внимание!