Hướng dẫn drag and drop html - kéo và thả html


Trong HTML, bất kỳ phần tử nào cũng có thể được kéo và thả.


Thí dụ

Hướng dẫn drag and drop html - kéo và thả html

Kéo hình ảnh W3Schools vào hình chữ nhật.


Kéo và thả

Kéo và thả là một tính năng rất phổ biến. Đó là khi bạn "lấy" một đối tượng và kéo nó đến một vị trí khác.


Hỗ trợ trình duyệt

Các số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ kéo và thả.

API
Kéo và thả4.0 9.0 3.5 6.0 12.0

Ví dụ kéo và thả HTML

Ví dụ dưới đây là một ví dụ kéo và thả đơn giản:

Thí dụ

Kéo hình ảnh W3Schools vào hình chữ nhật.




Hỗ trợ trình duyệt

Hỗ trợ trình duyệt

Các số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ kéo và thả.

API

Kéo và thả



Ví dụ kéo và thả HTML

Ví dụ dưới đây là một ví dụ kéo và thả đơn giản:


hàm cho phépDrop (ev) {& nbsp; & nbsp; ev.preventDefault (); }

chức năng kéo (eV) {& nbsp; ev.datatransfer.setData ("văn bản", ev.target.id); }

chức năng thả (ev) {& nbsp; ev.preventdefault (); & nbsp; & nbsp; var data = ev.datatransfer.getdata ("văn bản"); & nbsp; & nbsp; ev.target.appendchild (document.getEuityById (dữ liệu)); }

The dataTransfer.setData() method sets the data type and the value of the dragged data:

function drag(ev) {
  ev.dataTransfer.setData("text", ev.target.id);
}

Hãy tự mình thử »


Nó có vẻ phức tạp, nhưng hãy trải qua tất cả các phần khác nhau của sự kiện kéo và thả.

Tạo một phần tử có thể kéo

Trước hết: Để tạo một phần tử có thể kéo, hãy đặt thuộc tính draggable thành true:

Những gì để kéo - OnDragStart và SetData ()


Sau đó, chỉ định những gì sẽ xảy ra khi phần tử bị kéo.

Trong ví dụ trên, thuộc tính ondragstart gọi hàm, kéo (sự kiện), chỉ định dữ liệu nào được kéo.

Phương thức dataTransfer.setData() đặt kiểu dữ liệu và giá trị của dữ liệu bị kéo:

chức năng kéo (eV) {& nbsp; ev.datatransfer.setData ("văn bản", ev.target.id); }
  ev.preventDefault();
  var data = ev.dataTransfer.getData("text");
  ev.target.appendChild(document.getElementById(data));
}

Trong trường hợp này, kiểu dữ liệu là "văn bản" và giá trị là ID của phần tử có thể kéo ("Drag1").

  • Dùng ở đâu - Ondragover
  • Sự kiện ondragover chỉ định nơi có thể loại bỏ dữ liệu kéo.
  • Theo mặc định, dữ liệu/phần tử không thể được loại bỏ trong các yếu tố khác. Để cho phép giảm, chúng ta phải ngăn chặn việc xử lý mặc định của phần tử.
  • Điều này được thực hiện bằng cách gọi phương thức
    <img draggable="true">
    0 cho sự kiện Ondragover:

Làm giảm - ondrop

Thí dụ

Khi dữ liệu kéo bị rơi, một sự kiện thả xảy ra.

API



Bài học hôm nay sẽ giúp các bạn có thể thực thi việc kéo/ thả trong HTML5. Ví dụ dưới minh họa cho việc kéo thả. Bạn có thể kéo logo từ hình chữ nhật bên trên xuống hình chữ nhật bên dưới.

Hướng dẫn drag and drop html - kéo và thả html


Nội dung

  • Kéo/Thả trong HTML5
  • Trình duyệt hỗ trợ
  • Ví dụ cụ thể về việc kéo/ thả:
  • Phần tử Draggable
  • Dữ liệu gì sẽ được kéo đi – ondragstart và setData()
    • Dữ liệu sau khi kéo sẽ được thả ở đâu? – ondragover
    • Thả – ondrop
  • Ví dụ bổ sung
    • Kéo thả hình ảnh qua lại

Kéo/Thả trong HTML5

Trình duyệt hỗ trợ

Ví dụ cụ thể về việc kéo/ thả:


Trình duyệt hỗ trợ

Ví dụ cụ thể về việc kéo/ thả:

Phần tử Draggable
Hướng dẫn drag and drop html - kéo và thả html
Hướng dẫn drag and drop html - kéo và thả html
Hướng dẫn drag and drop html - kéo và thả html
 
Hướng dẫn drag and drop html - kéo và thả html
 
Hướng dẫn drag and drop html - kéo và thả html
Dữ liệu gì sẽ được kéo đi – ondragstart và setData()4.0 9.0 3.5 6.0 12.0

Ví dụ cụ thể về việc kéo/ thả:


<!DOCTYPE HTML>
<html>
<head>
<style>
#div1 {
width: 350px;
height: 70px;
padding: 10px;
border: 1px solid #aaaaaa;
}
</style>
<script>
function allowDrop(ev) {
ev.preventDefault();
}

function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}

function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>

<p>Kéo ảnh logo TimODay vào hình chữ nhật:</p>

<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<br>
<img id="drag1" src="img_logo.gif" draggable="true" ondragstart="drag(event)" width="336" height="69">

</body>
</html>

Phần tử Draggable


Phần tử Draggable

Dữ liệu gì sẽ được kéo đi – ondragstart và setData()

<img draggable="true">

Dữ liệu gì sẽ được kéo đi – ondragstart và setData()

Kéo và thả là một tính năng rất phổ biến. Bạn có thể chọn một đối tượng và di chuyển nó đến một vị trí khác.

Trong HTML5, kéo/thả  là một phần của chuẩn: bất cứ phần tử nào cũng có thể thực hiện việc kéo thả.

Bảng dưới đây là một số phiên bản trình duyệt đầu tiên hỗ trợ việc kéo/ thả trong HTML5

function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}

Trong trường hợp này, kiểu dữ liệu là “text” và giá trị id của thẻ là (“drag1”).


Dữ liệu sau khi kéo sẽ được thả ở đâu? – ondragover

Sự kiện ondragover chỉ định nơi dữ liệu được thả xuống.

Theo mặc định, dự liệu/các phần tử không thể được thả vào các thành phần khác của trang. Để cho thả xuống, chúng ta sẽ phải thay đổi mặc định của phần tử bằng cách gọi phương thức event.preventDefault() cho sự kiện ondragover:

event.preventDefault()

Thả – ondrop

Khi người dùng thả đối tượng, sự kiện thả sẽ được kích hoạt.

Trong ví dụ ở trên, thuộc tính ondrop gọi hàm drop(event):

function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}

Giải thích ví dụ:

  • Gọi phương thức preventDefault() để thay đổi cách xử lý mặc định của trình duyệt đối với dữ liệu (mặc định trình duyệt sẽ mở liên kết tới dữ liệu)
  • Lấy dữ liệu vừa được thả xuống bằng phương thức dataTransfer.getData(). Phương thức này sẽ trả về kiểu dữ liệu giống như kiểu đã được đặt trong phương thức setData()
  • Ở đây dữ liệu được thả xuống là id của thẻ (“drag1”)
  • Chèn thẻ được kéo vào bên trong thẻ được thả

Ví dụ bổ sung

Kéo thả hình ảnh qua lại

Trong ví dụ này chúng ta sẽ cải tiến đề thực hiện việc kéo – thả ảnh qua lại giữa 2 thẻ div.Ví dụ:
Ví dụ:


<!DOCTYPE HTML>
<html>
<head>
<style>
#div1, #div2 {
float: left;
width: 100px;
height: 35px;
margin: 10px;
padding: 10px;
border: 1px solid black;
}
</style>
<script>
function allowDrop(ev) {
ev.preventDefault();
}

function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}

function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>

<h2>Kéo và thả</h2>
<p>Kéo ảnh trở lại giữa hai phần tử.</p>

<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
<img src="img_logo.gif" draggable="true" ondragstart="drag(event)" id="drag1" width="88" height="31">
</div>

<div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

</body>
</html>