2009-10-27 3 views
0

Если у меня есть разметка, как это:Как я могу перетаскивать функцию jQuery, расширяя контейнер?

<!-- Other Content --> 
<div id="container"> 
<div class="draggable"> 
</div> 
<div class="draggable"> 
</div> 
</div> 
<!-- Other Content --> 

Как я могу иметь контейнер DIV расширяться по вертикали (я только хочу #container быть способны расширяться вниз), как я перетащить один из draggables? Я думал об использовании обратного вызова перетаскивания, но должен быть способ CSS, не так ли?

+0

Просто очистка содержимого не работает? '#container {overflow: auto}' –

ответ

0

Вывод, который я пришел, заключается в том, что это может быть даже невозможно. Я пошел с альтернативным методом использования jQuery.resizable, чтобы сделать это вручную вместо этого.

1

Вы не можете сделать это с помощью css, потому что элемент контейнера div # не получил никакого класса, вызванного перетаскиванием.

Лучший способ сделать это с обратным вызовом:

$('.draggable').draggable({ 
    start: function(event, ui) { $('#container').addClass('expand'); }, 
    stop: function(event, ui) { $('#container').removeClass('expand'); } 
}); 
+0

Итак, что в классе расширения, чтобы он расширялся? –

0

Я сделал некоторые успехи, но это все еще не работает так, как я хотел бы, чтобы это.
Вот как я теперь она частично работает (используя разметку выше):

var dragCatch = function(event, ui) { 
    var containerOffset = $('#container').offset().top; 
    var containerBottom = containerOffset + $('#container').height(); 
    var componentHeight = $(this).height(); 

    if (event.pageY > containerBottom - componentHeight - 2) { 
     $('#container').height(event.pageY - containerOffset + componentHeight + 2); 
     $(this).css('top', event.pageY - containerOffset); 
    } 
}; 

$(this).each(function() { 
    $(this).draggable({ 
     grid: [117,1] 
     ,snap: '.draggable' 
     ,snapMode: 'outer' 
     ,containment: '#container' 
     ,drag: dragCatch 
    }) 
}); 

Этот код будет успешно изменить размер #container DIV, но остановить перемещение .draggable DIV, где #container используется до конца. Если я отпущу, а затем снова перетащить, то .draggable снова переместится туда, где заканчивается #container, а затем остановится, даже если #container продолжает расширяться по размеру.

+0

, если это так, что вы можете добавить бары с размерами в свой контейнер div, а затем просто используйте resizable() вместо draggable(). в качестве альтернативы для вашего примера удалите опцию сдерживания, если ваш растущий ящик вам никогда не удастся вытащить из каждого контейнера. –

+0

Да, я мог бы использовать панель изменения размера, но я бы предпочел, чтобы страница была способна расширяться одним действием, а не двумя. Что касается удаления опции сдерживания, я понял, что мой первоначальный пост был не таким ясным, что я хочу, чтобы контейнер div расширялся только в вертикальном направлении. (Теперь я исправил это) –

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