Home » HTML » API trong HTML5 » Drag / Drop – Kéo thả trong HTML5
Ví dụ và cách kéo thả dữ liệu trong HTML5.

Drag / Drop – Kéo thả trong HTML5

Kéo thả là một phần trong chuẩn HTML5.

WebVN logo
Kéo thả Logo WebVN qua lại giữa hai hình chữ nhật.

Kéo và thả

Kéo và thả là những tính năng rất phổ biến và là một phần trong chuẩn HTML5, bất kỳ thẻ nào cũng có thể kéo được.

Trình duyệt hỗ trợ

Số trong bảng dưới đây thể hiện phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ cho thuộc tính.

Thuộc tính Icon Chrome Icon FireFox Icon IE Icon Safari Icon Opera
Kéo - Thả 4.0 3.5 9.0 6.0 12.0

Ví dụ về kéo – thả

Demo

Trông có vẻ phức tạm nhưng nó thể hiện rất đầy đủ từng phần của sự kiện kéo thả.

Làm cho một thẻ có thể kéo

Đây chính là bước đầu tiên của sự kiện kéo thả: làm cho một thẻ có thể kéo đi được bằng cách đặt thuộc tính draggable là true:

Dữ liệu gì được Kéo đi? – ondragstart and setData()

Đây chính là bước thứ 2 : Điều gì sẽ xảy ra khi một thẻ được kéo đi?

Trong ví dụ ở trên, thuộc tính ondragstart gọi tới một hàm là drag(event), hàm này quy định dữ liệu gì được kéo đi.

Phương thức dataTransfer.setData() cho phép chúng ta đặt kiểu dữ liệu và giá trị của thẻ được kéo:

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

Thả ở đâu? – ondragover

Sự kiện ondragover quy định khu vực nào dữ liệu được phép thả xuống.

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

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 một hàm là drop(event):

Giải thích về đoạn JavaScript trên:

  • 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ả ảnh qua lại giữa 2 thẻ
Trong ví dụ này chúng ta sẽ học cách để thực hiện việc kéo – thả ảnh qua lại giữa 2 thẻ div.

5 comments

  1. Bài viết rất hay, cảm ơn bạn, hi vọng bạn sẽ còn viết thêm nhiều bài như thế này nữa. ^_^

  2. pctester2020

    Cũng kéo thả nhưng tình huốnng này khác. Mình muốn hình ảnh được kéo thả khắp nơi trên màn hình (trong thẻ body) thì làm thế nào?

    • Bạn sử dụng thuộc tính ondrop và ondragover cho thẻ body nhé 🙂

  3. Ad cho mình hỏi, ví dụ trong div mà dữ liệu được thả xuống đã chứa sẵn một thẻ khác (vd: thẻ img) thì có replace thẻ có sẵn không? Mình muốn nó replace mà không biết làm thế nào?

  4. Bảo Ngọc

    Bài Viết Hay, Thank

Leave a Reply

Your email address will not be published. Required fields are marked *

*