Mam tabelę HTML i chcę narysować strzałkę z jednej komórki do drugiej. Na przykład tak:
Jak można to zrobić?
Przykładowy 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>
Jeśli zmienisz rozmiar przeglądarki, strzałka powinna pozostać w (nowej) pozycji początkowej / końcowej.
javascript
html
svg
guettli
źródło
źródło
Odpowiedzi:
Przy odrobinie JavaScript i CSS możesz to osiągnąć bez płótna lub SVG. Oto przykład:
źródło
ctrl -
(zmniejsz rozmiar), strzałka traci pozycję końcową.Możesz użyć mojego rozwiązania jeszcze nie ukończyć strzałki rysowania, pozwól stworzyć płótno i narysować linię z dwóch punktów, na podstawie obliczenia punktu początkowego i końcowego.
źródło
Rozwiązanie Javascript:
źródło
Tak bym to zrobił: element svg używa wielkości tabeli dla wartości viewBox. Obliczasz rozmiar i położenie komórek, które chcesz skorelować, i użyj tej pozycji do narysowania linii. Znacznik służy do końcówki strzały.
Zmień rozmiar okna:
AKTUALIZACJA:
Ponieważ ktoś skomentował, że po zmianie rozmiaru strzała traci swoją pozycję, dodaję gif:
źródło
ctrl +
(poctrl -
) imgur.com/8xbEAK2 Iuse Chromium 78.0.3904.70Możesz użyć elementu SVG i stylów css do absolutnej pozycji nakładającej się na stół. I uzyskaj punkt początkowy i końcowy przez JavaScript DOM API jak
getBoundingClientRect()
Oto demo. (Wykonane w Angular, ale można go używać wszędzie. Przykład czystego JavaScript patrz poniżej.)
Możesz dynamicznie zmieniać początek i koniec. Musisz tylko ponownie wywołać metodę, aby uzyskać pozycje. Zauważ, że używam lewego, górnego, prawego przycisku, aby umieścić strzałkę na krawędzi elementu. Możesz obliczyć punkt środkowy lub krawędź, porównując obie pozycje.
I musisz położyć SVG na stole. Możesz to zrobić ustawiając css
position: absolute; left: 0; top: 0
. Pamiętaj jednak, że twój rodzic również powinien mieć tenposition
atrybut. na przykładposition: relative
.Aktualizacja: tutaj czysta wersja JavaScript. Kliknij po lewej, aby wyświetlić wszystkie pliki i wybierz plik index.js, aby wyświetlić zawartość JS. (jak w kodzie VS).
Pełny kod:
Po prostu skopiuj powyższy kod do nowego pustego pliku HTML i uruchom go w przeglądarce.
Btw. Możesz to również zrobić z płótnem. (alternatywa dla svg)
źródło
Musisz umieścić tabelę w div i podać właściwość, position: relative Następnie napisz HTML dla strzałki (użyj obrazu, jeśli chcesz) i nadaj mu właściwość absolutną, a następnie nadaj jej styl, jak chcesz, na górze, Lewo prawo..
Przeczytaj więcej o właściwościach pozycji tutaj https://www.w3schools.com/css/css_positioning.asp
źródło