Поэтому у меня более 9000 элементов, каждый из которых должен быть перемещен. Кажется невозможным превратить каждый из них в draggable, применив плагин jQueryUI напрямую. Я думал о том, чтобы сделать элемент перетаскиваемым в ответ на событие мыши, прослушивая событие мыши вниз документа и проверяя, является ли цель события одним из элементов. Как только мышь на элементе произошла, я превращаю его в перетаскиваемое и в то же время заставляю его захватывать и перетаскивать уже так, чтобы перетаскивание продолжалось, как если бы эта мышь начиналась с перетаскивания. Как только перетаскивание завершено (либо путем отбрасывания, либо отмены), перетаскиваемый плагин уничтожается, и элемент возвращается в состояние несвязанного состояния. Таким образом можно перетаскивать только один элемент за раз, что делает это решение легким и масштабируемым.
Как я могу это сделать?
Это можно сделать, используя комбинацию trigger()
и draggable("destroy")
:
function downHandler(event)
{
var target = $(event.target);
target.off("mousedown", downHandler); // prevents infinite recursion
target.on("mouseup", upHandler);
target.draggable();
target.trigger(event);
}
function upHandler(event)
{
var target = $(event.target);
target.draggable("destroy");
target.off("mouseup", upHandler);
target.on("mousedown", downHandler);
}
$(".draggable-on-mousedown").on("mousedown", downHandler);