Bagaimana cara menggambar garis antara dua atau lebih elemen untuk menghubungkannya? Kombinasi HTML / CSS / JavaScript / SVG / Canvas baik-baik saja.
Jika jawaban Anda mendukung semua ini, sebutkan:
- elemen yang dapat diseret
- koneksi yang dapat diseret / diedit
- elemen penghindaran tumpang tindih
Pertanyaan ini telah diperbarui untuk menggabungkan berbagai variasinya .
javascript
html
connection
line
jquery-ui-draggable
Bakhtiyor
sumber
sumber
Menggabungkan garis dengan svg sangat berharga untuk saya, dan bekerja dengan sempurna ... pertama-tama, Scalable Vector Graphics (SVG) adalah format gambar vektor berbasis XML untuk grafik dua dimensi dengan dukungan untuk interaktivitas dan animasi. Gambar SVG dan perilakunya ditentukan dalam file teks XML. Anda dapat membuat svg dalam HTML menggunakan
<svg>
tag. Adobe Illustrator adalah salah satu perangkat lunak terbaik yang digunakan untuk membuat svg kompleks menggunakan jalur.Prosedur untuk menggabungkan dua div menggunakan sebuah baris:
buat dua div dan beri mereka posisi apa pun yang Anda butuhkan
(demi penjelasan, saya melakukan beberapa gaya sebaris tetapi selalu baik untuk membuat file css terpisah untuk penataan gaya)
<svg><line id="line1"/></svg>
Tag garis memungkinkan kita menggambar garis antara dua titik tertentu (x1, y1) dan (x2, y2). (untuk referensi kunjungi w3schools.) kita belum menentukannya. karena kita akan menggunakan jQuery untuk mengedit atribut (x1, y1, x2, y2) dari tag baris.
dalam
<script>
menulis tagSaya menggunakan penyeleksi untuk memilih dua div dan baris ...
position()
Metode jQuery memungkinkan kita mendapatkan posisi elemen saat ini. Untuk informasi lebih lanjut, kunjungi https://api.jquery.com/position/ (Anda juga dapat menggunakanoffset()
metode)Sekarang setelah kita mendapatkan semua posisi yang kita butuhkan, kita dapat menggambar garis sebagai berikut ...
.attr()
Metode jQuery digunakan untuk mengubah atribut elemen yang dipilih.Yang kami lakukan di baris di atas adalah mengubah atribut baris dari
untuk
karena
position()
mengembalikan dua nilai, satu 'kiri' dan 'atas' lainnya, kita dapat dengan mudah mengaksesnya menggunakan .top dan .left menggunakan objek (di sini pos1 dan pos2) ...Sekarang tag garis memiliki dua koordinat berbeda untuk menarik garis di antara dua titik.
Tip: tambahkan event listener saat Anda membutuhkan div
Tip: pastikan Anda mengimpor pustaka jQuery terlebih dahulu sebelum menulis apa pun di tag skrip
Setelah menambahkan koordinat melalui JQuery ... Ini akan terlihat seperti ini
Cuplikan berikut hanya untuk tujuan demonstrasi, harap ikuti langkah-langkah di atas untuk mendapatkan solusi yang tepat
sumber
Saya juga memiliki persyaratan yang sama beberapa hari yang lalu
Saya menggunakan lebar penuh dan tinggi svg dan menambahkannya di bawah semua div saya dan menambahkan baris ke svg ini secara dinamis.
Lihat bagaimana saya melakukannya di sini menggunakan svg
HTML
https://jsfiddle.net/kgfamo4b/
sumber
VisJS mendukung ini dengan contoh Panahnya , yang mendukung elemen yang dapat diseret.
Ini juga mendukung koneksi yang dapat diedit, dengan contoh Peristiwa Interaksi .
sumber
GoJS mendukung ini, dengan contoh Bagan Statusnya , yang mendukung seret dan lepas elemen, dan pengeditan koneksi.
sumber
Baru-baru ini, saya mencoba mengembangkan aplikasi web sederhana yang menggunakan komponen seret dan lepas dan memiliki garis yang menghubungkannya. Saya menemukan dua pustaka javascript yang sederhana dan menakjubkan ini:
sumber
Raphaël mendukung ini, dengan contoh Graffle -nya .
sumber
D3 memiliki ratusan contoh , beberapa di antaranya cocok untuk pertanyaan ini.
Contoh tanpa seret dan lepas, yang sudah diperbaiki:
Contoh tanpa drag and drop, yaitu interaktif:
Contoh dengan menyeret dan melepas:
sumber
mxGraph - digunakan oleh draw.io - mendukung kasus penggunaan ini, dengan contoh Grapheditor -nya . Dokumentasi. Contoh.
sumber
Cytoscape mendukung ini dengan contoh Arsitekturnya yang mendukung elemen menyeret.
Untuk membuat koneksi, ada ekstensi edgehandles . Itu belum mendukung pengeditan koneksi yang ada. Pertanyaan.
Untuk mengedit bentuk koneksi, ada ekstensi pengeditan tepi . Demo.
The edit-editation ekstensi tampaknya menjanjikan, namun tidak ada demo belum.
sumber
js-graph.it mendukung kasus penggunaan ini, seperti yang terlihat pada panduan memulai , mendukung elemen menyeret tanpa tumpang tindih koneksi. Sepertinya tidak mendukung pengeditan / pembuatan koneksi. Sepertinya tidak dipertahankan lagi.
sumber
JointJS / Rappid mendukung kasus penggunaan ini dengan contoh Kitchensink -nya yang mendukung seret dan lepas elemen, dan pemosisian ulang koneksi. Ini memiliki banyak contoh.
sumber