Pull to refresh

Drag'n'Drop на сайте c JQuery

Немногие из нас используют возможность Drag'n'Drop в интерфейсах на своих сайтах, так как сталкиваются в основном с 2мя проблемами:
  1. Пользователи к такому ещё не привыкли и им сложно это донести
  2. Нет идеальных готовых решений

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

Для создания своих интерфейсов Drag'n'Drop я использую библиотеку jQuery. Основным недостатком готового решения, для меня была невозможность переместить элемент за пределы родителя, если z-index родителя отличен от значения z-index других элементов страницы. Но недавно эта преграда была сломлена, и самое главное с сохранением функциональности.

И так, простой пример реализации:

Инициируем объект перемещения.
$('div.drag').draggable({
containment : 'window',
/* Задаем собственную функцию для создания элемента отображающегося при перетаскивании */
helper : myHelper,
cursor : 'pointer',
cursorAt: { top: 0, left: 0 },
revert: 'invalid',
opacity : 0.4
});


Пишем функцию создания элемента для отображения при перемещении.
function myHelper( event ) {
/* Клонируем перемещаемый элемент */
var clone = $(event.currentTarget).clone();
/* Меняем id элемента и ставим ему высокий z-index для отображения над всеми элементами страницы */
$(clone).attr("id", "myHelper").css("z-index", "10000");
/* Добавляем элемент в главного родителя на всей странице */
$('body').append(clone);
/* Возвращаем как результат ссылку на наш созданный элемент */
return document.getElementById('myHelper');
}


Теперь вы сможете перемещать любые элементы по всей странице, а пример реализации можно посмотреть в интерфейсе этого сервиса.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.