JavaScript API: тяни-бросай
Осталось обсудить совсем мало новшеств в браузерах нового поколения, связанных с работой JavaScript. Сегодня рассмотрим небольшую, но очень приятную возможность перетаскивания элементов на веб-странице посредством действия "тяни-бросай" (drag'n'drop).
Метод drag'n'drop появился с началом эры графических пользовательских интерфейсов и стал замечательным открытием в работе с персональным компьютером. Суть этого ставшего привычным метода в том, чтобы перемещать посредством манипулятора мышь объекты на экране монитора, заставляя таким образом их менять позицию или взаимодействовать друг с другом.
Drag'n'drop позволил упростить многие операции при взаимодействии с вычислительной машиной, которые в ином случае требовали от пользователя гораздо больше телодвижений. Перетаскивание мышкой может заменить целую последовательность кликов. Простота работы с компьютером, соответственно, увеличивает производительность труда и эффективность работы.
Метод drag'n'drop в браузерах до последнего времени не использовался, так как большой необходимости в этом не было. Но, когда массово начали использоваться веб-приложения, и html из документа превратился в интерфейс к этим веб-приложениям, появилась необходимость в реализации этого метода в браузерах.
Естественно, поначалу веб-программисты писали собственные реализации метода drag'n'drop. Потом эта реализация появилась в некоторых фреймворках. И вот теперь идёт речь о реализации drag'n'drop в качестве официального стандарта для браузеров, что, в свою очередь, должно резко уменьшить количество "велосипедов", изобретённых до этого.
В текущем черновике W3C перетаскивание элементов веб-странички реализовано следующим образом. Во-первых, появился новый атрибут для перетаскиваемых элементов draggable. Этому атрибуту в случае реализации drag'n'drop следует задавать значение "true".
В спецификации D&D появилось несколько новых событий, нужных для реализации метода перетаскивания:
- ondragstart - этот метод вызывается в начале перетаскивания элемента;
- ondragend - этот метод вызывается, когда перетаскивание завершилось;
- ondragover - этот метод вызывается при наведении курсора мышки с перемещаемым элементом на целевой элемент;
- ondragleave - этот метод вызывается, когда курсор мышки с перемещаемым элементом покидают целевой элемент;
- ondrop - этот метод вызывается при "бросании" перемещаемого элемента на целевой элемент, когда отпускается кнопка мыши.
События ondragstart, ondragend вызываются для перемещаемого элемента, а события ondragover, ondragleave, ondrop - для целевого элемента, куда происходит перемещение.
За непосредственные данные, которые перемещаются, отвечает объект dataTransfer. Типов данных, которые можно перемещать из элемента в элемент, в разных браузерах разное количество. Основных типов перемещаемых данных два - text/plain и text/uri-list. Но, например, в браузере Firefox этих типов шесть, в том числе и картинки.
Вот, собственно, и весь текущий черновой стандарт метода drag'n'drop для браузеров.
Попробуем написать небольшой пример этой технологии. В нашем примере можно перетянуть мышью текстовый элемент "тяни" внутрь синего квадратного контейнера "бросай". Для простоты напишем только обработчики методов ondragstart и ondrop. Обработчики ondragenter и ondragover будут просто возвращать false, чтобы заблокировать стандартное поведение браузера.
<script> // Обработчик перемещаемого элемента function drag(target, e) { e.dataTransfer.setData('text/plain', target.id);} //Обработчик элемента-приёмника function drop(target, e) { var id = e.dataTransfer.getData('text/plain'); target.appendChild(document.getElementById(id));} </script> <!- перемещаемый элемент -> <p id="file" draggable="true" ondragstart="drag(this, event)"> Тяни</p> <!- элемент-приёмник -> <div id="box" style=" width:100px; height:100px; background-color: blue" ondrop="drop(this, event)" ondragenter="return false" ondragover="return false"> Бросай</div>
Пример работает в последних версиях Google Crome и Mozilla Firefox.
Михаил АСТАПЧИК
Горячие темы