Я создаю создателя интерактивного генеалогического древа, в отличие от более простых версий, которые представляют собой простые родословные диаграммы/деревья.
Требования для моего (на основе familyecho.com):
- несколько партнеров по сравнению с простым родителем от 2 до 1, который вы обычно видите.
- несколько братьев и сестер
- партнеры не обязательно должны иметь детей
- не всегда должна быть родительская "пара", может быть только один отец/мать
Проблема. Я встречаю: я генерирую смещения на основе "текущего" node/члена семьи, и когда я прохожу мимо первого поколения, скажем, 2 родителя, он перекрывается.
Пример перекрытия, а также партнера, который не нарисован на той же оси X:
Вот фактическое приложение и главный файл js где у меня проблема. И вот упрощенная jsfiddle Я создал, что демонстрирует проблему с родителем/смещением, хотя мне действительно нужно разрешить перекрытие для этого вообще, в дополнение к тому, чтобы партнеры были нарисованы на той же оси x, что и другие партнеры.
Как я могу решить это и возможные конфликты, перекрывающиеся в будущем? Нужна ли какая-то функция перерисовки, которая обнаруживает конфликты и корректирует смещения каждого блока при обнаружении? Я пытаюсь сделать его бесшовным, чтобы было сделано ограниченное количество перерисовки.
Пример вычисления смещения относительно "контекста" или текущего node:
var offset = getCurrentNodeOffset();
if ( relationship == RELATIONSHIPS.PARTNER ) {
var t = offset.top; // same level
var l = offset.left + ( blockWidth + 25 );
} else {
var t = offset.top - (blockHeight + 123 ); // higher
var l = offset.left - ( blockWidth - 25 );
}