Угловой путь SVG не виден - PullRequest
       2

Угловой путь SVG не виден

0 голосов
/ 17 января 2019

Я работаю над проектом, где у меня есть страница со списком рабочих мест, и мне нужно визуально показать прогрессию (как перейти с одной работы на другую) с помощью линий / стрелок, чтобы пользователь мог следовать за ними. Я создал страницу, которая содержит все данные для этого, и теперь я пытаюсь использовать пути SVG для создания линий поверх данных и рисования путей.

Я нашел код в другом ответе, который преобразовал в чистый JS и удалил ссылки jQuery, чтобы иметь возможность использовать его в своем проекте.

Вот рабочая скрипка с одним примером пути:

http://jsfiddle.net/x4nmqkLj/

Вот моя попытка:

http://jsfiddle.net/szrdb263/

Моя проблема, с которой я сталкиваюсь, заключается в том, что SVG и Path кажутся созданными, НО, я не могу увидеть линию / путь в DOM. Однако, если я просматриваю элементы в веб-инструментах, я вижу элемент SVG и элемент пути, и они, кажется, находятся в правильном месте, куда путь будет нарисован из начальной и конечной позиции.

Мой отображаемый путь выглядит следующим образом:

<path class="path" id="path1" d="M449.953125 512.34375 V568.03125 A55.6875 55.6875 0 0 0 505.640625 623.71875 H765.515625 A55.6875 55.6875 0 0 1 821.203125 679.40625 V1055.3203125"></path>

Вот элемент SVG: enter image description here

Вот элемент пути: enter image description here

Путь должен рисовать линию от первого поля 1A до нижнего ряда, второе поле 2D. Кажется, что путь находится там, где и ожидалось, от нижнего центра первого поля до верхнего центра нижнего поля, где будет нарисована стрелка.

CSS:

  #svgContainer {
    z-index: -10;
    opacity: 0.5;
    margin: 2.5em 2.5em;
    position: absolute;
    background-color: #999;
}

  path { 
    fill:   none !important;
    stroke: #000 !important;
    stroke-width: 0.7em !important;
  }

Есть что-то конкретное, что я пропускаю, и это не появляется?

Я не очень знаком с SVG, но видение как элемента SVG, так и элемента Path в DOM заставляет меня думать, что он довольно близок. Я не могу представить, что стрелка находится за пределами DOM, но я могу ошибаться.

Обновление:

Я вставил свой код пути в несколько «валидаторных» сайтов для SVG, чтобы посмотреть, будет ли он нарисован, и я не получаю никаких визуальных указаний. Это предполагает, что что-то не так с координатами, которые он использует для создания пути. Тем не менее, тот же код используется в рабочем примере, поэтому я задаюсь вопросом, является ли это в конце концов угловатым извращением при манипулировании своего рода DOM.

Обновление 2: Я считаю, что я решил проблему. Мне пришлось изменить способ получения конечных координат в JS.

До:

  // calculate path's end (x,y) coords
  var endX = endCoord.offsetLeft + 0.5 * endElem.offsetWidth - svgLeft;
  var endY = endCoord.offsetTop - svgTop;

После того, как:

  // calculate path's end (x,y) coords
  var endX = endCoord.getBoundingClientRect().left + 0.5 * endElem.offsetWidth - svgLeft;
  var endY = endCoord.getBoundingClientRect().top - svgTop;

Новая скрипка: http://jsfiddle.net/8dumowvt/

1 Ответ

0 голосов
/ 17 января 2019

Я получил ваш пример, выполнив следующее:

  • Заменено offsetTop и offsetLeft на getBoundingClientRect().top и getBoundingClientRect().left в connectElements()
  • Изменен стиль svgContainer, чтобы придать ему положительный z-индекс, чтобы svg отображался поверх других элементов
  • Добавлен pointer-events: none; в svgContainer, чтобы вы могли взаимодействовать с элементами, стоящими за ним

Вот обновленный Скрипка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...