что такое drag and drop

Drag-and-drop

что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop

что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop

Drag-and-drop (в переводе с английского означает буквально тащи-и-бросай; Бери-и-Брось) — способ оперирования элементами интерфейса в интерфейсах пользователя (как графическим, так и текстовым, где элементы GUI реализованы при помощи псевдографики) при помощи манипулятора «мышь» или сенсорного экрана.

Способ реализуется путём «захвата» (нажатием и удержанием главной (первой, чаще левой) кнопки мыши) отображаемого на экране компьютера объекта, программно доступного для подобной операции, и перемещении его в другое место (для изменения расположения) либо «бросания» его на другой элемент (для вызова соответствующего, предусмотренного программой, действия). По отношению к окнам (также способным к перемещению подобным способом) данный термин обычно не употребляется.

Базовыми действиями и самыми простыми примерами drag-and-drop действий являются: перемещение объекта, перемещение объекта в из панели в панель, хотя в современных операционных системах drag-and-drop получил широкое применение и является одним из главных способов взаимодействия с компьютером в графическом интерфейсе пользователя.

Объектами для перемещения могут быть следующие элементы интерфейса: значки (иконки) Рабочего стола, плавающие панели инструментов, ярлыки программ в Панели задач (начиная с Win XP), элементы TreeView, текстовая строка, ячейка DataGridView., также элементы OLE. Перемещаться объекты могут как в пределах некоторой определённой области, в пределах одного окна, между панелями одного окна, так и между разными окнами.

Событие перетаскивания должно инициироваться каким-либо действием пользователя. Чаще всего этим действием является нажатие левой кнопки мыши на элементе (событие это называется MouseDown), который может быть перемещен в своем контейнере. Некоторые компоненты обладают собственными событиями начала drag-n-drop — например, TreeView имеет событие ItemDrag.

Источник

Метод создания DRAG and DROP эффекта

Придя впервые к технологии DRAG and DROP столкнулся с очень тяжелым её описанием (Это мое субъективное мнение. Прошу с ним не соглашаться, а перечитать все что только можно и посмотреть на этот вопрос с многих сторон). И решил написать пару статей, нацеленных на начинающих разработчиков, кто хочет познать дзен.

Статья будет состоять из двух частей:

Параграф №1 Метод создания DRAG and DROP эффекта

Перед началом глубокого разбора, посмотрим поверхностно. Представьте себя в роли грузчика, вам необходимо перемесить коробку с одного места на другое. Для грузчика это «Ну взял, ну перенес. Готово!», а для программиста “Подошел к коробке, наклонился, взял коробку, поднял коробку, прошел N шагов, наклонился, отпустил коробку.”. Я это к тому, что перед началом работы проиграйте все в голове, по шагам и вы станете гораздо ближе к истине.

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

При создании DRAG and DROP первым шагом необходимо объекту, который мы будем перемещать, присвоить значение draggable=’true’.

,
На первом этапе я хочу показать сам процесс, а после мы его распространим на все объекты. Мы сейчас работаем в JS и как вам известно, в браузере существуют различные события, к которым мы можем привязать свои последовательности действий. Давайте разберем необходимые события для создания DRAG and DROP:

dragstart — происходит, когда пользователь начинает перетаскивать элемент.
drag — происходит, когда элемент перетаскивается.
dragend — происходит, когда пользователь закончил перетаскивание элемента.
dragenter — происходит, когда перетаскиваемый элемент попадает в целевой объект.
dragleave — происходит, когда перетаскиваемый элемент покидает целевой объект.
dragover — происходит, когда перетаскиваемый элемент находится над целью.
drop — происходит, когда перетаскиваемый элемент падает на целевой объект.

Теперь очень важная информация! События делятся на две группы. Для перемещаемого элемента (тот кого мы перетаскиваем): dragstart, Drag, Dragend. Для принимающего элемента (куда перетаскиваем): Dragenter, Dragleave, Dragover, Drop. И эти события не могут работать наоборот, но они могут работать друг без друга.

К примеру: Необходимо переместить объект и оставить его там, где мы отпустили кнопку мыши. Эта задача не требует принимающей части.

Бесспорно, пример сделан на коленке, но он замечательно иллюстрирует не обязательность принимающего объекта.

Я считаю примеры с отдельными событиями ни к чему, так как если в строчке d1.addEventListener(‘dragstart’,function() <вы замените ‘dragstart’ на любое другое событие, сами сможете с ним поиграть и получить интересные результаты. Давайте даже так, поиграйте и то что вам показалось необычным и интересным покажите в комментариях, так каждый узнает много нового и сам сможет это повторить.

Параграф №2. Не работает DROP в DRAG and DROP

Когда вы попробуете все события, вы обнаружите что drop не работает. Это разработчики данного метода делают атата тем, кто решил «И это всё… Хух, ерунда».

Это примите как факт, без него работать не будет.

Источник

Drag-and-drop

Из Википедии — свободной энциклопедии

что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop

Способ реализуется путём «захвата» (нажатием и удержанием главной (первой, чаще левой) кнопки мыши) отображаемого на экране компьютера объекта, программно доступного для подобной операции, и перемещении его в другое место (для изменения расположения) либо «бросания» его на другой элемент (для вызова соответствующего, предусмотренного программой, действия). По отношению к окнам (также способным к перемещению подобным способом) данный термин обычно не употребляется.

Базовыми действиями и самыми простыми примерами drag-and-drop действий являются: перемещение объекта, перемещение объекта из панели в панель, хотя в современных операционных системах drag-and-drop получил широкое применение и является одним из главных способов взаимодействия с компьютером в графическом интерфейсе пользователя.

Объектами для перемещения могут быть следующие элементы интерфейса: значки (иконки) Рабочего стола, плавающие панели инструментов, ярлыки программ в Панели задач (начиная с Win XP), элементы TreeView, текстовая строка, ячейка DataGridView., также элементы OLE. Перемещаться объекты могут как в пределах некоторой определённой области, в пределах одного окна, между панелями одного окна, так и между разными окнами.

Событие перетаскивания должно инициироваться каким-либо действием пользователя. Чаще всего этим действием является нажатие левой кнопки мыши на элементе (событие это называется MouseDown), который может быть перемещен в своем контейнере. Некоторые компоненты обладают собственными событиями начала drag-n-drop — например, TreeView имеет событие ItemDrag.

Источник

Форум

Справочник

Drag and drop

В свое время приходилось реализовывать кучу drag and drop’ов под самым разным соусом.

Эта статья представляет собой учебник-выжимку о том, как организовать drag’n’drop в javascript, начиная от основ и заканчивая готовым фреймворком.

Кроме того, почти все javascript-библиотеки реализуют drag and drop так, как написано (в статье дано несколько разных вариантов, не факт что ваш фреймворк использует лучший). Зная, что и как, вы сможете поправить и адаптировать существующую библиотеку под себя.

Drag’n’drop в свое время был замечательным открытием в области интерфейсов, которое позволило упростить большое количество операций.

Перенос мышкой может заменить целую последовательность кликов. И, самое главное, он упрощает внешний вид интерфейса: функции, реализуемые через drag’n’drop, в ином случае потребовали бы дополнительных полей, виджетов и т.п.

Основная логика drag and drop

Координаты и кнопка мыши

При обработке событий, связанных с мышью, нужен кроссбраузерный способ получения координат курсора из события в обработчике. Кроме того, необходимо знать нажатую кнопку мыши.

Кроссбраузерно ставить эти свойства на объект будет функция fixEvent (по статье свойства объекта событие):

В этом коде e.which проходит кросс-браузерную обработку, чтобы корректно отражать нажатую кнопку мыши. Вы можете подробно прочитать об этом в статье Свойства объекта событие.

Координата X:
Координата Y:

Отслеживаем клик на объекте переноса

Чтобы начать перенос элемента, мы должны отловить нажатие кнопки мыши на объекте.

Пока этот обработчик будет запоминать объект в глобальной переменной dragObject

При нажатии на элемент он запоминается и выделяется.
Выделение(запоминание) действует на все время, когда нажата кнопка мыши, в том числе при перемещении курсора.

что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop

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

Тогда время инициализации можно сильно сократить, если назначать обработчик onmousedown не на каждый объект переноса, а на контейнер. И уже в самом обработчике по event.target определять, где произошел клик.

Drag and drop контроллер

Перед дальнейшим развитием проведем реорганизацию кода.

На это натыкались многие писатели drag’n’drop приложений. Мы же будем изначально закладывать производительность во все критические участки кода.

Визуальное перемещение элемента

Вот так:
что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop

Начало движения: сохранение позиции курсора в элементе

Посетитель обычно кликает не в левый-верхний угол, а куда угодно на элементе.

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

что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop

Отсюда легко получаем смещение курсора мыши:

Это изначальное смещение мы запоминаем при клике, прибавляем его при начале движения и сохраняем в дальнейшем.
Тогда позиция элемента относительно курсора мыши будет все время одной и той же.

что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop

Кроме того, при начале переноса останавливается выделение и перенос текста браузером:

Если этого не сделать, то движение курсора мыши при нажатой кнопке будет не только перемещать элемент, но и, например, выделять текст под собой (стандартная функция выделения текста на странице).

Например, переносимый объект очень сложен, и его передвижение целиком тормозит браузер и выглядит громоздко/неэстетично.

Сам элемент при этом скрывается display/visibility=’none’ или просто остается на месте, в зависимости от логики интерфейса.

Переносимый клон инициализуется в начале переноса и уничтожается в конце.

Опускаем элемент

Существенная техническая проблема заключается в том, что событие mouseup сработает не на корзине, а на переносимом элементе, т.к. курсор мыши находится именно над ним.

что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop

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

Перенеси меня в корзину

что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop

что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop

В коде контроллера: функции, тело которых заменено на «. «, остались без изменения с прошлого примера.

Основных изменений всего три.

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

Если да, то демка всего лишь выводит сообщение. Реально приложение, конечно, может сделать более сложные действия.

Индикация переноса над объектом

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

Однако, так как mouseMove выполняется при каждом передвижении мыши, его надо максимально оптимизировать.

Пронеси меня над корзиной

что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop

что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop

Код уже стал довольно длинным, поэтому в листинге ниже повторяющиеся фрагменты заменены на троеточие «. «

Отделяем начало drag’n’drop от простого клика

Как отделить? Очень просто:

В коде этой демки стоит расстояние не 2, а 25 пикселей, в целях наглядности происходящего.

До перемещения курсора на 25 пикселей вверх или вниз перенос не начнется.

что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and dropчто такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop

что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop

Оптимизация

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

Принципиальных решений здесь два.

Смена способа вычисления координат

document.elementFromPoint(x,y)

Этот малоизвестный метод работает во всех браузерах и возвращает элемент по координатам на странице.

На время вызова elementFromPoint необходимо спрятать переносимый элемент, чтобы он не закрывал акцептора.

Псевдокод будет выглядеть так:

Вычисление по известным размерам

Например, мы переносим объект в список акцепторов:

И мы знаем, что каждый элемент имеет фиксированную высоту и отступы:

В таком случае, можно вычислить номер LI, разделив общую высоту контейнера на высоту акцептора.

Конечно, такая оптимизация возможна не всегда и зависит от конкретной задачи.

Убрать элемент из-под курсора

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

Упростить объект переноса

Можно переносить не сам объект, а его «аватар», схематическое изображение.

Это может быть полезно:

Рефакторинг

Код dragMaster ‘а на текущий момент сочетает весь функционал по отслеживанию переноса, отображению и опусканию на акцептор.

Целесообразно его разделить на три компоненты: переносимые объекты, цели переноса (акцепторы) и менеджер, который следит, что куда переносится.

DragObject

В другой реализации может показывать перенос как-то по-другому, например создавать «переносимый клон» объекта.
onDragMove(x, y) Вызывается при переносе объекта в координаты (x,y). Отображает перенос. onDragFail() Обрабатывает неудачный перенос. В текущей реализации возвращает объект на старые координаты.

DropTarget

Как показано дальше, поддерживаются вложенные DropTarget : объект будет положен туда, куда следует, вне зависимости от степени вложенности.

dragMaster

Итоговый Drag’n’Drop фреймворк

Скачать пакет из итогового фреймворка и демок можно здесь.

Источник

HTML5 Drag and Drop загрузка файлов

что такое drag and drop. Смотреть фото что такое drag and drop. Смотреть картинку что такое drag and drop. Картинка про что такое drag and drop. Фото что такое drag and drop
Благодаря нововведениям HTML5 создавать Drag and Drop интерфейсы стало гораздо проще. К сожалению, эти нововведения еще не обладают обширной поддержкой браузеров, но надеюсь в скором времени это изменится (на данный момент работает в Firefox 4+, Chrome и Opera 11.10).

Разметка

Сразу говорю, статья написана больше для новичков, чем для профессионалов. Поэтому некоторые моменты будут описываться очень подробно.

Для начала, нам необходимо создать HTML файл с таким содержанием:

Вся работа у нас будет происходить с контейнером dropZone. Теперь добавим стили для нашего документа (style.css):

В стилях Вы можете заметить три состояния у элемента dropZone: при наведении, если возникает какая-то ошибка и при успешном выполнении.

Скрипт загрузки

Теперь мы приступим к самому интересному — написанию JavaScript кода. Для начала, нам необходимо создать переменные, в одну из которых мы поместим нашу dropZone, а во второй укажем максимальный размер файла.

Дальше мы должны проверить поддерживает ли браузер Drag and Drop, для этого мы будем использовать FileReader функцию. Если браузер не поддерживает Drag and Drop, то внутри элемента dropZone мы напишем «Не поддерживается браузером!» и добавим класс «error».

Следующее что мы сделаем это будет анимация эффекта перетаскивания файла на dropZone. Отслеживать эти действия мы будет с помощью событий «ondragover» и «ondragleave». Но, так как эти события не могут быть отслежены у jQuery объекта, нам необходимо обращаться не просто к «dropZone», а к «dropZone[0]».

Теперь нам необходимо написать обработчик события «ondrop» — это событие когда перетянутый файл опустили. В некоторых браузерах при перетягивании файлов в окно браузера они автоматически открываются, что бы такого не произошло нам нужно отменить стандартное поведение браузера. Также нам необходимо убрать класс «hover», и добавить класс «drop».

Дальше нам нужно добавить проверку на размер файла, для этого добавим в обработчик «ondrop» следующий строчки кода:

Теперь нам необходимо написать AJAX запрос отсылающий наш файл в обработчик. Для создания AJAX запроса мы будем использовать объект XMLHttpRequest. Добавим для объекта XMLHttpRequest два обработчика событий: один будет показывать прогресс загрузки файла, а второй результат загрузки. В качестве обработчика укажем файл upload.php.

Теперь займемся функциями прогресса загрузки и результата загрузки. В функции «uploadProgress» нет ничего сложного, лишь простейшая математика.

В функции «stateChange» мы должны проверить завершен ли процесс загрузки, и если да, то необходимо проверить не возникла ли какая-либо ошибка. Код успешного запроса «200», если же код отличается от этого, то это означает, что произошла ошибка.

Написание JavaScript части завершено.

Серверная часть

Все что нам осталось, это написать простейший обработчик, который будет сохранять файл в нужном нам месте. В написании обработчика я не буду сильно углубляться, а лишь приведу небольшой пример на PHP.

На этом всё, надеюсь статья была полезной для Вас.

Скачать исходные файлы вы можете здесь.
Перевод и доработка статьи: HTML5 Native Drag And Drop File Upload

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *