Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> HTML

Cách thiết lập phần tử có thể kéo thả (draggable) trong HTML?

Sử dụng thuộc tính draggable với giá trị true hoặc false để bật/tắt khả năng kéo thả cho phần tử. Mặc định: false (trừ <a> có href, <img>, <selection>).

Ví dụ hoàn chỉnh

<!DOCTYPE HTML>
<html>
  <head>
    <style>
      .drag { float: left; width: 100px; height: 35px; border: 2px dashed #876587; margin: 15px; padding: 10px; }
    </style>
  </head>
  <body>
    <div class="drag" ondrop="drop(event)" ondragover="dropNow(event)">
      <p ondragstart="dragStart(event)" ondrag="draggingNow(event)" draggable="true" id="dragtarget">Kéo tôi!</p>
    </div>
    <div class="drag" ondrop="drop(event)" ondragover="dropNow(event)"></div>
    <div id="box"></div>
    <p>Kéo hộp trái sang phải hoặc ngược lại.</p>
    <script>
      function dragStart(e) { e.dataTransfer.setData("Text", e.target.id); }
      function draggingNow(e) { document.getElementById("box").innerHTML = "Đã kéo thành công!"; }
      function dropNow(e) { e.preventDefault(); }
      function drop(e) {
        e.preventDefault();
        var data = e.dataTransfer.getData("Text");
        e.target.appendChild(document.getElementById(data));
        document.getElementById("box").innerHTML = "Phần tử đã thả thành công!";
      }
    </script>
  </body>
</html>

Các sự kiện Drag & Drop

Sự kiện (phần tử kéo) Sự kiện (phần tử thả)
dragstart dragenter
drag dragover
dragend dragleave
drop

Lưu ý

  • Phải e.preventDefault() trong dragover để cho phép drop.
  • dataTransfer.setData() / getData() truyền dữ liệu.
  • Trên mobile: cần xử lý touch events riêng (Pointer Events).