HTML | Перетащить и отпустить

Опубликовано: 1 Марта, 2022

Перетаскивание - это очень интерактивная и удобная для пользователя концепция, которая упрощает перемещение объекта в другое место путем его захвата. Это позволяет пользователю щелкнуть и удерживать кнопку мыши над элементом, перетащить его в другое место и отпустить кнопку мыши, чтобы опустить элемент туда. В HTML 5 Drag and Drop намного проще кодировать, и любой элемент в нем можно перетаскивать.

События перетаскивания: существует множество событий перетаскивания, некоторые из них перечислены ниже:

События Описание
ondragstart Вызывает функцию перетаскивания (событие), которая указывает, какие данные нужно перетащить.
ондрагентер Чтобы определить, должна ли цель перетаскивания принять перетаскивание. Если дроп должен быть принят, то это событие должно быть отменено.
Ondragleave Происходит, когда мышь покидает элемент перед допустимой целью перетаскивания во время перетаскивания
ондраговер Указывает, куда можно перетащить перетаскиваемые данные
капля Указывает, где произошло перетаскивание в конце операции перетаскивания.
ондрагенд Происходит, когда пользователь закончил перетаскивать элемент

Объект передачи данных: свойство передачи данных используется, когда происходит весь процесс перетаскивания. Он используется для удержания перетаскиваемых данных из источника в нужное место. С ним связаны следующие свойства:

Атрибуты Описание
dataTransfer.setData (формат, данные) Устанавливает данные для перетаскивания
dataTransfer.clearData (формат) Вызов этой функции без аргументов очищает все данные. Вызов его с аргументом формата удаляет только эти конкретные данные.
dataTransfer.getData (формат) Возвращает данные указанного формата. Если таких данных нет, возвращает пустую строку.
dataTransfer.types Это свойство возвращает массив всех форматов, установленных в событии dragstart.
dataTransfer.files Он используется для возврата всех файлов, которые необходимо удалить.
dataTransfer.setDragImage (элемент, x, y) Он используется для отображения существующего изображения в качестве перетаскиваемого изображения вместо изображения по умолчанию рядом с курсором. Координаты указывают место падения
dataTransfer.addElement (элемент) Добавляет указанный элемент для рисования как изображение обратной связи при перетаскивании
dataTransfer.effectAllowed (значение) Сообщает браузеру, что пользователю разрешены только перечисленные типы операций. Для свойства можно задать следующие значения: none, copy, copyLink, copyMove, link, linkMove, move, all и неинициализированный.
dataTransfer.dropEffect (значение) Управляет обратной связью, которую пользователь получает во время событий dragenter и dragover. Когда пользователь наводит курсор на целевой элемент, курсор браузера указывает, какой тип операции будет выполняться (например, копирование, перемещение и т. Д.). Эффект может принимать одно из следующих значений: нет, копировать, связывать, перемещать.

Процедура перетаскивания:

  • Шаг 1. Сделайте объект перетаскиваемым
    • Сначала установите для атрибута draggable значение true, чтобы этот элемент можно было перетаскивать <img draggable = «true»>
    • Затем укажите, что должно произойти при перетаскивании элемента. Атрибут ondragstart вызывает функцию drag (event), которая указывает, какие данные нужно перетащить. Метод dataTransfer.setData () устанавливает тип данных и значение перетаскиваемых данных.
    • Слушатель событий ondragstart установит разрешенные эффекты (копирование, перемещение, ссылка или некоторая комбинация).
    function dragStart (ev) {
        ev.dataTransfer.setData ("текст", ev.target.id);
    }
    
  • Шаг 2: Отбрасываем объект
    • Событие ondragover указывает, куда можно перетащить перетаскиваемые данные. По умолчанию данные / элементы нельзя отбрасывать в другие элементы. Чтобы разрешить сброс, он должен предотвратить обработку элемента по умолчанию. Это делается путем вызова метода event.preventDefault ().
    • Наконец, событие drop, которое позволяет выполнить фактическое падение.
    function dragDrop (ev) {
        ev.preventDefault ();
        var data = ev.dataTransfer.getData («текст»);
        ev.target.appendChild (document.getElementById (данные));
    }
    

Пример 1:

Выход:

Объяснение:

  • Начните перетаскивание, установив для свойства draggable элемента, который нужно перетащить, значение true.
  • Получите перетаскиваемые данные с помощью метода dataTransfer.getData (). Этот метод вернет любые данные, для которых был задан тот же тип в методе setData ().
  • Вызовите метод event.preventDefault (), чтобы разрешить удаление элементов в других элементах, предотвращая обработку элемента по умолчанию.
  • Элемент хранится в переменных данных, которые мы добавляем в элемент drop.

Example 2: This example illustrate the image drag and drop.

<!DOCTYPE HTML>
<html>
    <head>
        <script>
            function allowDrop(ev) {
                ev.preventDefault();
            }
              
            function dragStart(ev) {
                ev.dataTransfer.setData("text", ev.target.id);
            }
              
            function dragDrop(ev) {
                ev.preventDefault();
                var data = ev.dataTransfer.getData("text");
                ev.target.appendChild(document.getElementById(data));
            }
        </script>
        <style>
            .div1 {
                width: 240px;
                height: 75px;
                padding: 10px;
                border: 1px solid black;
                background-color: #F5F5F5;
            }
            p {
                font-size:20px;
                font-weight:bold;
            }
            .gfg {
                font-size:40px;
                color:#009900;
                font-weight:bold;
            }
        </style>
    </head>
    <body>
        <div class = "gfg">GeeksforGeeks</div>
         <p>Image Drag and Drop in boxes</p>
        <div class="div1" ondrop="dragDrop(event)" ondragover="allowDrop(event)">
        <img id="drag1" 
        ondragstart="dragStart(event)" width="220" height="70"></div>
        <br>
        <div class="div1" ondrop="dragDrop(event)" ondragover="allowDrop(event)"></div>
    </body>
</html>                                    

Выход: