API Drag dan Drop HTML5 menyediakan cara yang kuat dan agak mudah untuk melaksanakan fungsi drag-and-drop dalam aplikasi web. Ia memanfaatkan satu siri peristiwa yang dicetuskan sepanjang proses drag-and-drop. Inilah pecahan langkah penting:
draggable
unsur HTML menjadi true
. Sebagai contoh: <div id="myElement" draggable="true">Drag me!</div>
. Ambil perhatian bahawa tidak semua elemen diseret secara lalai (misalnya, <input>
, <textarea></textarea>
).Mengendalikan Acara Seret: Peristiwa Teras yang terlibat adalah:
dragstart
: Dipecat apabila operasi seret bermula pada elemen draggable. Di sinilah anda biasanya menetapkan data yang akan dipindahkan menggunakan event.dataTransfer.setData()
. Anda juga boleh menetapkan imej seretan tersuai menggunakan event.dataTransfer.setDragImage()
.drag
: Dipecat berulang kali sementara elemen sedang diseret. Ini sering digunakan untuk kemas kini visual atau maklum balas.dragend
: Dipecat apabila operasi seret berakhir (sama ada berjaya atau tidak berjaya). Ini adalah tempat yang baik untuk pembersihan.Pengendalian Peristiwa Drop: Elemen Sasaran (di mana anda ingin menjatuhkan elemen yang diseret) perlu mengendalikan peristiwa ini:
dragover
: Dipecat berulang kali manakala elemen draggable berada di atas sasaran drop. Secara kritis, anda mesti memanggil event.preventDefault()
di pengendali dragover
untuk membolehkan penurunan itu berlaku. Jika tidak, kejatuhan akan dicegah secara lalai.drop
: Dipecat apabila elemen draggable jatuh ke sasaran drop. Di sinilah anda mengambil data yang dipindahkan menggunakan event.dataTransfer.getData()
dan melakukan tindakan yang diperlukan (contohnya, menggerakkan elemen, mengemas kini DOM).event.dataTransfer
adalah pusat untuk memindahkan data. setData()
mengambil jenis mime (misalnya, "teks/dataran", "teks/html", "aplikasi/json") dan data sebagai argumen. getData()
mengambil data berdasarkan jenis MIME.Inilah contoh mudah:
<code class="html"><div id="draggable" draggable="true">Drag me</div> <div id="droppable">Drop here</div> <script> const draggable = document.getElementById('draggable'); const droppable = document.getElementById('droppable'); draggable.addEventListener('dragstart', (event) => { event.dataTransfer.setData('text/plain', 'Dragged text'); }); droppable.addEventListener('dragover', (event) => { event.preventDefault(); }); droppable.addEventListener('drop', (event) => { event.preventDefault(); const data = event.dataTransfer.getData('text/plain'); droppable.innerText = data; }); </script></code>
Beberapa isu biasa boleh timbul apabila melaksanakan html5 drag-and-drop:
event.preventDefault()
dalam dragover
: Ini adalah kesilapan yang paling kerap. Tanpa itu, penyemak imbas akan menghalang operasi drop.setData()
dan getData()
.Ya, anda boleh menyesuaikan maklum balas visual dengan ketara. Inilah Caranya:
dragover
. Sebagai contoh, anda boleh menukar kursor untuk move
apabila elemen diseret ke atas zon drop.dragover
dan dragleave
.event.dataTransfer.setDragImage()
dalam acara dragstart
untuk menyesuaikan perwakilan visual elemen yang diseret. Ini membolehkan anda membuat imej yang lebih kecil dan lebih cekap untuk menyeret, bukannya seluruh elemen itu sendiri. Pemindahan data diuruskan melalui objek event.dataTransfer
. Kaedah utama adalah:
setData(format, data)
: Kaedah ini menetapkan data yang akan dipindahkan. format
Menentukan jenis mime (misalnya, "teks/dataran", "teks/html", "aplikasi/json"), dan data
adalah data sebenar. Anda boleh menetapkan pelbagai jenis data jika diperlukan.getData(format)
: Ini mengambil data yang berkaitan dengan jenis MIME yang ditentukan. Jika data untuk jenis itu tidak dijumpai, ia mengembalikan rentetan kosong. Pilihan jenis mime adalah penting. Untuk teks mudah, "Teks/Plain" cukup. Untuk data yang lebih kompleks, pertimbangkan "Aplikasi/JSON" untuk data berstruktur atau "Teks/HTML" untuk memindahkan serpihan HTML. Sentiasa pastikan kedua -dua setData()
dan getData()
panggilan menggunakan jenis mime yang sama.
Contoh Menggunakan JSON:
<code class="javascript">// In dragstart: event.dataTransfer.setData('application/json', JSON.stringify({id: 123, name: 'My Item'})); // In drop: const data = JSON.parse(event.dataTransfer.getData('application/json')); console.log(data.id, data.name);</code>
Ingatlah untuk mengendalikan kesilapan yang berpotensi, seperti ketika getData()
mengembalikan rentetan kosong, menunjukkan bahawa jenis data yang diminta tidak dipindahkan. Pengendalian ralat yang teguh menjadikan pelaksanaan seret dan drop anda lebih dipercayai.
Atas ialah kandungan terperinci Bagaimanakah saya menggunakan API Drag dan Drop HTML5 untuk mewujudkan antara muka seret dan drop?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!