English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Перетаскивание в HTML5

Перетаскивание - это обычная функция, которая позволяет захватывать объект и перетаскивать его в другое место. В HTML5 перетаскивание является частью стандарта, и любая элемент может быть перетаскиваемым.

Перетаскивание HTML5 (Drag и Drop)

Перетаскивание (Drag и drop) является частью стандарта HTML5.

Перетащите значок oldtoolbag.com в прямоугольную рамку.

Перетаскивание

Перетаскивание - это обычная функция, которая позволяет захватывать объект и перетаскивать его в другое место.

В HTML5 перетаскивание является частью стандарта, и любая элемент может быть перетаскиваемым.

Поддержка браузеров

Internet Explorer 9+, Firefox, Opera, Chrome и Safari поддерживают перетаскивание.

Внимание:Safari 5.1.2 не поддерживает перетаскивание.

Пример перетаскивания HTML5

Ниже приведен пример простого примера перетаскивания:

Онлайн пример

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8"> 
<title>Основной учебник(oldtoolbag.com)</title>
<style type="text/css">
#div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
</style>
<script>
функция allowDrop(ev)
{
    ev.preventDefault();
}
функция 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>Перетащите изображение oldtoolbag.com в прямоугольную рамку:</p>
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<br>
<img id="drag1" src="/static/images/logo-n.png" draggable="true" ondragstart="drag(event)" width="336" height="69">
</body>
</html>
Проверьте ‹/›

Это может показаться сложным, но мы можем изучить различные части события перетаскивания по отдельности.

Установите элемент в состояние перетаскивания

Сначала, чтобы сделать элемент перетаскиваемым, установите атрибут draggable в true:

        <img draggable="true">

Что перетаскивать - ondragstart и setData()

Затем определяется, что произойдет, когда элемент будет перетаскиваться.

В предыдущем примере атрибут ondragstart вызвал функцию drag(event), которая определяет данные для перетаскивания.

Метод setData() устанавливает тип данных и значение для перетаскиваемых данных:

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

Text - это DOMString, представляющий тип данных для перетаскивания, которые необходимо добавить в объект перетаскивания. Значение - идентификатор перетаскиваемого элемента ("drag1").

Где放置 - ondragover

Событие ondragover определяет, где можно放置 перетаскиваемые данные.

По умолчанию, данные/элементы не могут быть放置ены в другие элементы. Если необходимо разрешить放置,我们必须 предотвратить defaultManager для элементов.

Это достигается вызовом метода event.preventDefault() события ondragover:

event.preventDefault()

Процесс放置 - ondrop

Происходит событие drop при放置 перетаскиваемых данных.

В предыдущем примере атрибут ondrop вызвал функцию, drop(event):

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

Объяснение кода:

  • Вызов preventDefault() для предотвращения стандартной обработки данных браузером (стандартное поведение события drop - это открытие данных в виде ссылки)

  • Получите перетаскиваемые данные с помощью метода getDataTransfer.getData("Text"). Этот метод возвращает любое данные, установленные в setData() методу того же типа.

  • Перетаскиваемые данные - это идентификатор перетаскиваемого элемента ("drag1")

  • Добавить перетаскиваемый элемент в элемент放置а (цель элемента)

Более примеров

Перетаскивание изображений в HTML5
Как перетаскивать изображения между двумя элементами  <div>  .