Может быть реализовано на нативном JavaScript путем навешивания обработчиков событий onmousedown, onmousemove, onmouseup на манипулируемый элемент (событие onmousedown), а также на заполняющий всю площадь страницы контейнер (события onmousemove, onmouseup). Естественно, механику взаимодействия элементов и отслеживания фазы drag and drop вам придется реализовать самостоятельно.
PS: При реализации drag and drop не забудьте про пользователей с сенсорным экраном. У них другая группа событий: ontouchstart, ontouchmove, ontouchend, и число точек касаний у них может быть больше чем одна.