drag的简单案例

106 阅读1分钟

简单案例: 文件拖到文件夹

image.png

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .dragdiv {
        width: 100px;
        height: 100px;
        background-color: bisque;
        -webkit-user-drag: element;
      }

      .files {
        width: 200px;
        height: 200px;
        background-color: rgba(0, 255, 255, 0.376);
        margin-top: 100px;
      }

      .fileshover {
        background-color: rgba(0, 255, 255, 0.979);
      }
    </style>
  </head>
  <body>
    <!-- 
      dragstart:拖拽开始
      dragend:拖拽结束
      dragover:拖拽的元素在可放置区域内移动时触发,即鼠标指针在可放置区域内移动时持续触发
      dragenter:拖拽的元素首次进入可放置区域时触发
      dragleave:拖拽的元素离开可放置区域时触发
      drop:当在可放置区域时,松开鼠标放置元素时触发
     -->
    <div draggable="true" class="dragdiv">我是文件1</div>
    <div class="files">
      <p>文件夹</p>
      拖动文件名称:
    </div>
    <script>
      const draggable = document.querySelector(".dragdiv");
      const files = document.querySelector(".files");
      // 开始拖拽事件
      draggable.addEventListener("dragstart", (event) => {
        const data = event.target.innerText;
        // dataTransfer在拖放交互期间传输的数据
        event.dataTransfer.setData("name", data);
      });
      // 添加dragover事件处理程序
      files.addEventListener("dragover", (event) => {
        event.target.classList.add("fileshover");
        // 注意: 这个要阻止默认行为
        event.preventDefault();
      });
      // 添加dragleave事件处理程序
      files.addEventListener("dragleave", (event) => {
        event.target.classList.remove("fileshover");
      });
      // 添加drop事件处理程序
      files.addEventListener("drop", (event) => {
        const data = event.dataTransfer.getData("name");
        const text = document.createTextNode(data);
        files.appendChild(text);
        event.target.classList.remove("fileshover");
      });
    </script>
  </body>
</html>

官网案例:

image.png

body {
  /* Prevent the user selecting text in the example */
  user-select: none;
}

#draggable {
  text-align: center;
  background: white;
}

.dropzone {
  width: 200px;
  height: 20px;
  background: blueviolet;
  margin: 10px;
  padding: 10px;
}
let dragged = null;

const source = document.getElementById("draggable");
source.addEventListener("dragstart", (event) => {
  // store a ref. on the dragged elem
  dragged = event.target;
});

const target = document.getElementById("droptarget");
target.addEventListener("dragover", (event) => {
  // prevent default to allow drop
  event.preventDefault();
});

target.addEventListener("drop", (event) => {
  // prevent default action (open as link for some elements)
  event.preventDefault();
  // move dragged element to the selected drop target
  if (event.target.className === "dropzone") {
    dragged.parentNode.removeChild(dragged);
    event.target.appendChild(dragged);
  }
});