Технология Drag & Drop
Технология Drag & Drop (перетащи и отпусти) используется практически в любой прикладной программе. Иногда (например при разработке JS игр) данную технологию надо применить и на веб странице.
В JavaScript нет встроенный событий Drag и Drop, которые поддерживаются многими языках программирования, но есть средства, с помощью которых данную технологию можно реализоватю.
Код скрипта:
<div style="position:relative; width:450px; height:125px; cursor:pointer">
<img src="bear.jpg" style="position:absolute; left:15px; top:10px"
onmousedown="Move(this)">
<div style="position:absolute; left:190px; top:10px; width:170px;
border: 1px solid; padding:5; text-align:left; background-color:white"
onmousedown="Move(this)">
Этот компонент имеет постоянный размер.
</div>
<div style="position:absolute; left:380px; top:10px" onmousedown="Move(this)">
Этот компонент не имеет постоянный размер.
</div>
<script type="text/javascript">
var SelectedItem;
var SelectedX, SelectedY;
var MouseX, MouseY;
function Move(ClickedItem)
{
SelectedItem = ClickedItem;
SelectedX = SelectedItem.style.pixelLeft;
SelectedY = SelectedItem.style.pixelTop;
MouseX = event.clientX;
MouseY = event.clientY;
document.onmousemove = Drag;
document.onmouseup = Drop;
}
function Drag()
{
SelectedItem.style.left = SelectedX + (event.clientX - MouseX);
SelectedItem.style.top = SelectedY + (event.clientY - MouseY);
return false;
}
function Drop()
{
document.onmousemove = null;
document.onmouseup = null;
}
</script>
С компонентами все понятно. У нас есть одна картинка и 3 компонента DIV, причем один из них является контейнером для двух других и картинки.
Рассмотрим подробней код скрипт. При нажатии на картинку или текст возникает событие onmousedown, которое вызывает функцию Move(this). this - название объекта, который вызвал функцию (например img или div).
Глобальной переменной SelectedItem присваивается имя компоненты, которая вызвала функцию
SelectedItem = ClickedItem
определяются координаты положения данной компоненты
SelectedX = SelectedItem.style.pixelLeft
SelectedY = SelectedItem.style.pixelTop
а также положение курсора мыши
MouseX = event.clientX
MouseY = event.clientY
При этом document.onmousemove присваивается функция Drag, которая будет выполнятся всякий раз, когда пользователь нажмет клавишей мыши на какой то компонент (рисунок, текст), а document.onmouseup (при отпускании кнопки мыши) функция Drop.
Функция Drag рассчитывает новые координаты положения картинки или текста в зависимости от расположения указателя мыши:
SelectedItem.style.left = SelectedX + (event.clientX - MouseX)
SelectedItem.style.top = SelectedY + (event.clientY - MouseY)
Функция Drop удаляет соответствие событиям вызов определенных функций:
document.onmousemove = null
document.onmouseup = null