Saya memiliki tabel html dan saya ingin menggambar panah dari satu sel ke sel lain. Misalnya seperti ini:
Bagaimana ini bisa dilakukan?
Contoh 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>
Jika Anda mengubah ukuran browser, panah harus tetap pada posisi awal / akhir (baru).
javascript
html
svg
guettli
sumber
sumber
Jawaban:
Dengan sedikit JavasSript dan CSS Anda dapat mencapai ini tanpa kanvas atau SVG. Berikut ini sebuah contoh:
sumber
ctrl -
(mengurangi ukuran) panah kehilangan posisi akhir.Anda dapat menggunakan solusi saya belum menyelesaikan panah menggambar, biarkan membuat kanvas dan menggambar garis dari dua titik, berdasarkan perhitungan titik awal dan akhir.
sumber
Solusi Javascript:
sumber
Ini adalah bagaimana saya akan melakukannya: Elemen svg menggunakan ukuran tabel untuk nilai viewBox. Anda menghitung ukuran dan posisi sel yang Anda butuhkan untuk berkorelasi dan menggunakan posisi ini untuk menggambar garis. Marker digunakan untuk ujung panah.
Harap ubah ukuran jendela:
MEMPERBARUI:
Karena seseorang berkomentar bahwa pada resize panahnya kehilangan posisi saya menambahkan gif:
sumber
ctrl +
(setelahctrl -
) imgur.com/8xbEAK2 Iuse Chromium 78.0.3904.70Anda bisa menggunakan elemen SVG dan gaya css untuk posisi absolut overlay tabel Anda. Dan dapatkan titik awal dan akhir dengan JavaScript seperti DOM API
getBoundingClientRect()
Ini demo. (Dibuat dengan Angular, tetapi Anda dapat menggunakannya di mana-mana. Contoh JavaScript murni lihat di bawah.)
Anda dapat mengubah awal dan akhir secara dinamis. Anda hanya perlu menginstal kembali metode untuk mendapatkan posisi. Perhatikan bahwa saya menggunakan tombol kiri, atas, kanan, untuk menempatkan panah di tepi elemen. Anda dapat menghitung titik tengah atau tepi dengan membandingkan kedua posisi.
Dan Anda harus menempatkan svg di atas meja. Anda dapat melakukan ini dengan mengatur css
position: absolute; left: 0; top: 0
. Tetapi perhatikan, bahwa orang tua Anda juga harus memilikiposition
atribut. misposition: relative
.Pembaruan: Ini adalah demo JavaScript murni. Klik di sebelah kiri untuk melihat semua file dan pilih index.js untuk melihat hal-hal JS. (seperti dalam Kode VS).
Kode lengkap:
Cukup salin kode di atas dalam file html kosong baru dan jalankan di browser Anda.
Btw. Anda juga dapat melakukan ini dengan kanvas. (alternatif untuk svg)
sumber
Anda perlu meletakkan tabel dalam div dan memberikan properti, posisi: relatif Kemudian tulis HTML untuk panah (gunakan gambar jika Anda mau) dan berikan properti absolut dan kemudian gaya itu seperti yang Anda inginkan, atas, kiri kanan..
Baca lebih lanjut tentang properti posisi di sini https://www.w3schools.com/css/css_positioning.asp
sumber