Jquery-UI, перетаскиваемый: проблема с событиями «over» и «out», когда droppable изменяет размер динамически - PullRequest
0 голосов
/ 01 мая 2019

Я работаю над проектом, которому нужно разрешить перетаскивание с боковой панели на некоторый контент.

Очень важно, чтобы содержимое (при наведении на него с помощью перетаскиваемого объекта) расширялось с применением некоторого отступа (для внутреннего содержимого, в примере кода изображения).

Когда я вхожу в буксируемое тело с помощью перетаскиваемого объекта, добавляется отступ что делает капельницу немного больше по размеру (как по ширине, так и по высоте). Пользовательский интерфейс Jquery не «распознает» это изменение размера, это означает, что когда я перемещаю перетаскиваемый объект немного ближе к нижней границе (или к правой границе), событие «out» уже инициируется (даже если ясно, что Draggable по-прежнему находится в (новых) границах Droppable).

Только после многократного перемещения перетаскиваемого объекта (подходя близко к левой и верхней границам, не оставляя предмет падения), jquery ui «распознает» новый (больший) размер предмета, и вы можете двигаться очень близко к основанию. или правую границу поля, не вызывая событие «out».

для моего проекта очень важно, чтобы я мог полностью перейти на нижнюю и правую границу объекта сброса, не вызывая событие "out".

У кого-нибудь есть подсказка, как я могу «научить» jquery ui в режиме перетаскивания, что размер бросаемого объекта изменился? (без перемещения по опускающейся и приближающейся левой и верхней границе)

1 Ответ

0 голосов
/ 04 мая 2019

Я проанализировал проблему в jquery UI.

это происходит из-за того, что метод "prepareOffsets" вызывается только тогда, когда вы перемещаете перетаскиваемый элемент к верхнему краю раскрываемого элемента сброса. "prepareOffsets" исправляет новый размер dropppable, и все работает правильно.

Небольшой патч в

$.ui.plugin.add( "draggable", "scroll", {

Плагин, метод:

drag: function( event, ui, i  ) {

исправил эту проблему. Вместо того, чтобы вызывать «prepareOffsets» только тогда, когда он находится в верхней части сбрасываемого объекта, вставить следующую строку:

if (scrolled == false){scrolled = true;}

чуть выше последнего оператора if метода "drag". Над этим утверждением:

if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {
   $.ui.ddmanager.prepareOffsets( i, event );
}

Возможно, это не идеальное решение (так как оно может слишком часто вызывать «prepareOffsets»), но оно решает все проблемы, которые у меня были с расширенным параметром droppable. «over», «out» и «drop» корректно работают с этим патчем.

Приветствия

...