DragEvent là kiểu sự kiện được kích hoạt khi người dùng kéo và thả văn bản hoặc phần tử đã chọn. Sự kiện này được giới thiệu trong HTML5.
Thuộc tính
| Thuộc tính | Mô tả |
|---|---|
| dataTransfer | Trả về đối tượng DataTransfer chứa dữ liệu đang được kéo hoặc thả. |
Cú pháp
object.ondragevent = function_name;
Trong đó function_name là hàm xử lý sẽ thực thi khi sự kiện xảy ra.
Các loại sự kiện DragEvent
| Sự kiện | Mô tả |
|---|---|
| ondrag | Xảy ra khi phần tử đang được kéo. |
| ondragend | Xảy ra khi người dùng kết thúc thao tác kéo. |
| ondragenter | Xảy ra khi phần tử được kéo vào vùng thả (drop target). |
| ondragleave | Xảy ra khi phần tử rời khỏi vùng thả trong khi đang kéo. |
| ondragover | Xảy ra khi phần tử đang ở trên vùng thả (kích hoạt liên tục). |
| ondragstart | Xảy ra khi người dùng bắt đầu kéo phần tử. |
| ondrop | Xảy ra khi phần tử được thả vào vùng thả. |
Ví dụ
Ví dụ minh họa kéo thả một phần tử <span> giữa hai ô <div>:
<!DOCTYPE html>
<html>
<head>
<style>
.DivDrop {
float: left;
width: 100px;
height: 40px;
margin: 10px;
border: 1px solid blue;
background-color: lightgreen;
font-weight: bold;
}
</style>
</head>
<body>
<h2>Ví dụ DragEvent</h2>
<div class="DivDrop">
<span id="spanDrag" draggable="true">Kéo cái này!</span>
</div>
<div class="DivDrop"></div>
<p id="Sample" style="clear:both"></p>
<script>
document.ondragstart = function(event) {
event.dataTransfer.setData("Text", "spanDrag");
document.getElementById("spanDrag").innerText = "đang kéo";
document.getElementById("spanDrag").style.backgroundColor = "lightgreen";
};
document.ondrag = function(event) {
document.getElementById("Sample").innerHTML = "Phần tử span đang được kéo";
};
document.ondragover = function(event) {
event.preventDefault(); // Cho phép thả
};
document.ondrop = function(event) {
event.preventDefault();
if (event.target.className == "DivDrop") {
var txt = event.dataTransfer.getData("Text");
event.target.appendChild(document.getElementById(txt));
document.getElementById(txt).innerText = "Đã thả";
document.getElementById(txt).style.backgroundColor = "lightyellow";
document.getElementById("Sample").innerHTML = "Phần tử span đã được thả";
}
};
</script>
</body>
</html>
Kết quả
- Ban đầu: Ô đầu tiên chứa văn bản "Kéo cái này!" trên nền xanh nhạt.
- Khi kéo: Văn bản thay thành "đang kéo", thông báo "Phần tử span đang được kéo" hiển thị.
- Khi thả vào ô thứ hai: Văn bản chuyển sang ô thứ hai, đổi thành "Đã thả" với nền vàng nhạt, thông báo cập nhật.
Giải thích chi tiết
- Hai
<div>cùng class "DivDrop" dùng chung CSS. Ô đầu tiên chứa<span id="spanDrag" draggable="true">. ondragstart: GọisetData("Text", "spanDrag")để lưu ID phần tử kéo. Thay đổi giao diện phần tử đang kéo.ondrag: Cập nhật thông báo trạng thái.ondragover: GọipreventDefault()để cho phép thả (trình duyệt mặc định chặn thả).ondrop: Ngăn hành vi mặc định, kiểm tra đích là ô "DivDrop", lấy dữ liệu ID, di chuyển phần tử<span>vào ô đích, cập nhật giao diện và thông báo.