Просто у него есть правильный ответ, но я бы хотел его немного расширить:
Основы перетаскиваемого div не слишком сложны.Вы присоединяете обработчик onclick
, чтобы инициировать перетаскивание.Внутренне это достигается путем изменения CSS для div, так что это position: absolute
.Затем вы начинаете отслеживать движения мыши (в основном onmousemove
) и изменяете значения div'а top
и left
в соответствии с захваченными вами движениями.
Отбрасывание немного сложнее.Вы всегда можете просто отпустить мышь и оставить div там, где вы его в конечном итоге переместили, но это оставляет его абсолютно позиционированным и, следовательно, вне обычного потока документов.Но удаление его «внутри» какого-то другого элемента означает большую подготовительную работу.
Из-за того, как работают события mouseover / mouseout / mouseenter, они не будут работать, пока вы перетаскиваете элемент - у вас естьваш перетаскиваемый элемент div под мышью, поэтому на остальной части страницы не будет происходить никаких событий входа / выхода мыши.jquery / mootools и тому подобное обходят его, позволяя вам указывать зоны перетаскивания.Места / размеры этих зон предварительно рассчитаны и по мере перетаскивания.Затем, когда вы перетаскиваете, положение перетаскиваемого объекта сравнивается с этими предварительно рассчитанными местоположениями зоны падения для каждого события перемещения.Если вы «входите» в одну из этих зон, то библиотеки внутренне запускают события mouseenter / mouseleave / mouseover, чтобы имитировать фактическое событие mouseenter / left / over, произошедшее.
Если вы попадете внутрь зоны, divпривязывается как ребенок этой зоны.Если вы выбрасываете наружу, то он обычно «возвращается назад» к тому месту, где он был, когда вы инициировали перетаскивание.
Изменение размера несколько похоже, за исключением того, что вы настраиваете height
и width
вместо top
и left
.