2016-05-12 2 views
0

У меня есть перетаскиваемый и отбрасываемый макет. Я создаю перетаскиваемый объект при добавлении его из выбора типа head. Однако у меня есть некоторые проблемы с размещением. Размер перетаскиваемого объекта намного больше, чем контейнер, в который он должен быть упаден. Это приводит к некоторым проблемам с отбрасыванием.Измените размер перетаскиваемого элемента после начала перетаскивания

Я не изменю размер элемента до половина его текущего размера после перетаскивания. Как мне это сделать? Проблема отсутствует в скрипке, если width.semester не установлен в 30%.

Вот JSFiddle

EDIT:

После реализовав @ user619081 решение, которое я хотел, чтобы это произошло, только если объект был очень большой. Я сделал глобальную переменную var tempWidth и обновил код на следующее:

start: function(event, ui) { 
    if(tempWidth < $(this).width()){ 
     $(this).addClass("moveable"); 
    } 
    tempWidth = $(this).width(); 
}, 
stop: function(event, ui) { 
    $(this).removeClass("moveable"); 
} 

ответ

7

Вам нужно зацепиться за перетаскивание и перетащить события перетаскиваемого виджета.

Подробнее о них здесь:

Теперь, когда вы знаете, как использовать их , вы можете сделать что-то вроде этого:

$(".courseBox").draggable({ 
    revert: "invalid", 
    containment: "document", 
    cursor: "move", 
    start: function(event, ui) { 
    $(ui.helper).css('width', "50%"); 
    }, 
    stop: function(event, ui) { 
    $(ui.helper).css('width', "100%"); 
    } 
}); 

Обратите внимание, что ui.helper содержит ссылку на элемент, который вы перетаскиваете, поэтому вы видите его в коде.

Вот working fiddle тоже.

+0

Приветствия это было то, что я искал! – Zeliax

+0

Как бы я это сделал, если бы захотел проверить, каков текущий размер элемента? И поэтому только меняйте его, если он большой, а не при переносе его из маленького контейнера в большой, прежде чем сбросить его на большой? – Zeliax

+0

Ваш вопрос действительно расплывчатый, мне нужно получить более подробную информацию о том, что вы хотели бы выполнить. Элемент draggable не знает, куда вы собираетесь его перемещать, у вас могут быть три зоны сброса, каждый из которых может иметь разный размер. Существует не универсальный подход, в котором мы бы знали, какой точный размер должен/не должен сжиматься. Нам нужно каким-то образом ограничить сценарий.То, что вы можете сделать, например, только сокращается, если его перетаскивают с большого на маленький и не сжимают, если его тянут наоборот, от маленького до большого. – Peter

2

Вы должны смотреть в ondragstart и ondragstop событий. Посмотрите на ev.originalEvent.dataTransfer, если вам нужно передать некоторую информацию об исходном состоянии элемента DOM, например, исходную ширину или что-то еще.

$(".courseBox").on('dragstart', function(ev) { 
    $(this).css('width', '50%'); 
}); 

$(".courseBox").on('dragstop', function(ev) { 
    $(this).css('width', '100%'); 
}); 
+0

Как бы проверить, что первоначальный размер элемента? Я пробовал искать Google, но безуспешно. – Zeliax

1
I have updated your fiddle just check it. 
It is working with targeted width size 

https://jsfiddle.net/8g2oqp0h/37/

+0

Это круто. Я не знаю, почему я сам об этом не думал. Однако я заметил, что он работает только в первый раз, когда я его перетащил. Я не работал, перетаскивая его назад и вперед. В противном случае я бы пометил ваш ответ как правильный ответ: – Zeliax

+0

По крайней мере, так оно и было на скрипке. После его реализации он отлично работает – Zeliax

Смежные вопросы