У меня есть HTML-таблица, и я хочу нарисовать стрелку из одной ячейки в другую ячейку. Например, вот так:
Как это можно сделать?
Пример HTML:
<html>
<body>
<table>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td id="end">9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td id="start">0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
</body>
</html>
Если вы измените размер браузера, стрелка должна остаться в (новой) начальной / конечной позиции.
javascript
html
svg
guettli
источник
источник
Ответы:
С помощью JavasSript и CSS вы можете достичь этого без холста или SVG. Вот пример:
источник
ctrl -
(уменьшить размер), стрелка теряет конечную позицию.Вы можете использовать мое решение, пока не завершено рисование стрелки, позвольте создать холст и нарисовать линию из двух точек, основываясь на расчете начальной и конечной точек.
источник
Решение Javascript:
источник
Вот как я бы это сделал: элемент svg использует размер таблицы для значения viewBox. Вы рассчитываете размер и положение ячеек, которые необходимо сопоставить, и используете эту позицию для рисования линии. Маркер используется для кончика стрелки.
Пожалуйста, измените размер окна:
ОБНОВИТЬ:
Так как кто-то заметил, что при изменении размера стрелка теряет свою позицию, я добавляю gif:
источник
ctrl +
(послеctrl -
) imgur.com/8xbEAK2 Iuse Chromium 78.0.3904.70Вы можете использовать элемент SVG и стили CSS для абсолютного положения, наложенного на вашу таблицу. И получить начальную и конечную точку с помощью JavaScript DOM API, как
getBoundingClientRect()
Вот демо. (Сделано с Angular, но вы можете использовать его везде. Пример чистого JavaScript см. Ниже.)
Вы можете изменить начало и конец динамически. Вам нужно только повторно вызвать метод, чтобы получить позиции. Обратите внимание, что я использую левую, верхнюю, правую кнопку, чтобы разместить стрелку на краю элемента. Вы можете вычислить центральную точку или край, сравнивая обе позиции.
И вы должны разместить svg над столом. Вы можете сделать это, установив CSS
position: absolute; left: 0; top: 0
. Но обратите внимание, что ваш родитель также должен иметьposition
атрибут. напримерposition: relative
.Обновление: здесь чистая демонстрация JavaScript. Нажмите слева, чтобы просмотреть все файлы и выберите index.js, чтобы просмотреть материал JS. (как в коде VS).
Полный код:
Просто скопируйте приведенный выше код в новый пустой HTML-файл и запустите его в своем браузере.
Btw. Вы также можете сделать это с помощью холста. (альтернатива для SVG)
источник
Вам нужно поместить таблицу в div и задать свойство position: относительное. Затем напишите HTML-код для стрелки (используйте изображение, если хотите) и задайте для него свойство absolute, а затем задайте стиль, как вам нужно, с помощью top, лево право..
Узнайте больше о свойствах позиции здесь https://www.w3schools.com/css/css_positioning.asp
источник