今回はドラッグ&ドロップのイベントを使ったJavascriptをご紹介します。
flexで並べた要素を「dragstart、drop、dragenter、dragleave、dragover」5つのイベントを使って
ドラック&ドロップの動きをつくります。実装すると直感的に移動できるのでとっても便利です。
デモページは、こちら
↓デモページのサンプルコードは以下となります。
▼HTML
<body> <h3>ドラッグ&ドロップ</h3> <div class="flex"> <div id="1" class="drag item">drag1</div> <div id="2" class="drop item">drop1</div> <div id="3" class="drop item">drop2</div> <div id="4" class="drop item">drop3</div> </div> </body>
▼CSS
<style> body { text-align: center; } .flex { display: flex; justify-content: center; } .item { line-height: 80px; height: 80px; width: 80px; border: 1px solid gray; } .drag.item { background-color: skyblue; } .dragging.item { background-color: skyblue; opacity: 0.3; } </style>
▼Javascript
<script> document.querySelector(".drag.item").draggable = true; document.querySelector(".drag.item").addEventListener("dragstart", onDragStart); document.querySelectorAll(".drop.item").forEach((element) => { element.addEventListener("drop", onDrop); element.addEventListener("dragover", onDragover); element.addEventListener("dragenter", onDragenter); element.addEventListener("dragleave", onDragleave); }); function onDrop(event) { event.currentTarget.classList.remove("dragging"); const items = [...document.querySelectorAll(".item")]; if (items.indexOf(event.currentTarget) === 0) { event.currentTarget.before(document.getElementById(event.dataTransfer.getData("text"))); } else { event.currentTarget.after(document.getElementById(event.dataTransfer.getData("text"))); } } function onDragStart(event) { event.dataTransfer.setData("text", event.currentTarget.id); } function onDragenter(event) { event.currentTarget.classList.toggle("dragging"); } function onDragover(event) { event.preventDefault(); } function onDragleave(event) { event.currentTarget.classList.toggle("dragging"); } </script>
デモの作成には、サンプルページ『JavaScript で ドラッグ&ドロップをやってみる-@sueasen』さんを参考にしました。
ありがとうございます。