HTMLElement: sự kiện dragover

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Sự kiện dragover được kích hoạt khi một phần tử hoặc vùng văn bản được chọn đang được kéo qua vùng thả hợp lệ (vài trăm mili giây một lần).

Sự kiện này có thể hủy và có thể nổi bọt lên đến các đối tượng DocumentWindow.

Cú pháp

Sử dụng tên sự kiện trong các phương thức như addEventListener(), hoặc đặt thuộc tính trình xử lý sự kiện.

js
addEventListener("dragover", (event) => { })

ondragover = (event) => { }

Loại sự kiện

Một DragEvent. Kế thừa từ Event.

Event UIEvent MouseEvent DragEvent

Thuộc tính sự kiện

Ngoài các thuộc tính liệt kê dưới đây, các thuộc tính từ giao diện cha Event cũng có sẵn.

DragEvent.dataTransfer Read only

Dữ liệu được truyền trong quá trình kéo và thả.

Ví dụ

Ví dụ kéo và thả tối giản

Trong ví dụ này, có một phần tử có thể kéo bên trong một vùng chứa. Hãy thử nắm phần tử, kéo nó qua vùng chứa kia, rồi thả ra.

Chúng ta sử dụng ba trình xử lý sự kiện ở đây:

  • Trong trình xử lý sự kiện dragstart, chúng ta lấy tham chiếu đến phần tử người dùng kéo
  • Trong trình xử lý sự kiện dragover của vùng chứa đích, chúng ta gọi event.preventDefault(), cho phép nó nhận sự kiện drop.
  • Trong trình xử lý sự kiện drop của vùng thả, chúng ta xử lý việc di chuyển phần tử có thể kéo từ vùng chứa gốc đến vùng thả.

Để xem ví dụ đầy đủ về kéo và thả, hãy xem trang dành cho sự kiện drag.

HTML

html
<div class="dropzone">
  <div id="draggable" draggable="true">This div is draggable</div>
</div>
<div class="dropzone" id="drop-target"></div>

CSS

css
body {
  /* Prevent the user from 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;
}

JavaScript

js
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("drop-target");
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);
  }
});

Kết quả

Thông số kỹ thuật

Specification
HTML
# handler-ondragover
HTML
# event-dnd-dragover

Tương thích trình duyệt

Xem thêm