Не могу ответить на вопрос напрямую, потому что я не знаком с dragula. Тем не менее, я использовал jqueryUI drag drop экстенсивно и его действительно хороший инструмент. Вы можете попробовать эту инфраструктуру.
Поскольку вы попросили пример, я впился в какой-то старый код. Возможно, вам захочется ознакомиться с учебниками jqueryUI для перетаскивания и droppable, чтобы дать вам некоторое представление, прежде чем смотреть на это. Я включил части функции. Я помещал маленькие точки, чтобы показать вам, где код был оставлен. Я положил < < < следующий ключевые строки для вас. Обратите внимание, как я использую закрытие, чтобы сделать ссылки доступными для разных частей. Закрытие является soooo awesome. Я злоупотребляю смертью, поэтому научитесь использовать его, если сможете.
Обратите внимание, что как только я получил свой объект перетаскивания, это то, о чем вы просите. Обратите внимание, как я привяжу переменную к моей функции позже, когда зарегистрирую перетаскиваемый.
Btw, обратите внимание, что есть функция остановки перетаскивания, на которую я не показываю определение. Если вы переместите объявление объекта dragObject за пределы startDrag, вы также можете увидеть его с помощью stopDrag, так как определение функции «включено» в функцию внешнего регистра.
function tapeChart_registerDraggables(parentObject,scope) {
if ((parentObject==null)||(parentObject==undefined)) {
parentObject=$jq(document.body);
}
var availablesShow = false;
var savingToServer = false;
var dragClone = null;
var startDrag = function(event, ui) {
tapeChartDraggingReservation = true;
var dragObject = event.target; <<<<<<
if (dragObject.getAttribute("unassigned")=="true") {
var is_chrome = window.chrome;
var is_safari = navigator.userAgent.toLowerCase().indexOf('safari/') > -1;
if (!is_chrome && !is_safari) {
$(ui.helper).css("margin-left", event.clientX - $(dragObject).offset().left);
$(ui.helper).css("margin-top", event.clientY - $(dragObject).offset().top);
}
}
...
// assigned rooms
if (scope!="UNBLOCKED") {
// register items in the grid
$(parentObject).find(".NODRAGHELPER").draggable(
{
snap : "true",
revert : "invalid",
start: startDrag, <<<<
stop: stopDrag
}
)
.click(function(){
if ($(this).is('.NODRAGHELPER-dragging')) {
return;
}
// seems that the user can drop and click fast
// prevent this
if (!savingToServer) {
tapeChart_getReservation(this);
}
return false;
});
}
...
спасибо, как бы вы получили доступ к id div, используя jqueryUI? – vabm
Как только у вас есть этот dragObject, вы просто получите его с помощью dragObject.id. Для всех стандартных атрибутов, таких как имя и идентификатор, вы можете просто использовать точечную нотацию, и она будет работать во всех браузерах. Однако, если вы добавляете специальные атрибуты в теги, вам нужно использовать .getAttribute («attName»), чтобы получить их, чтобы он работал во всех браузерах. Точечная нотация для пользовательских работает в IE и нигде больше. getAttribute работает во всех. Если вы хотите пойти jquery, то его $ (nodeObject) .attr ("attName") до тех пор, пока его текст. Если вы забросили объект js на тег, вам нужно будет использовать $ (nodeObject) .data ("attName") – javaMoca
Возможность присоединить целые объекты к тегам/элементам в DOM настолько смехотворна. Js - действительно впечатляющий язык. – javaMoca