jQuery Draggable и переполнение проблема

71

У меня возникает нежелательный эффект, когда я перетаскиваю div из контейнера div, который установлен как переполнение: прокрутка.

Я нашел пример кого-то еще, где у них возникла проблема, но я не смог найти разрешение

Пример для вставки в корзину

Что происходит, так это то, что свиток просто увеличен, я вижу, почему это было бы желательным поведением, если вы хотите перетащить его в пункт назначения в прокручиваемом div, но я хочу, чтобы он мог вывести его за пределы прокрутки.

Теги:
drag-and-drop

6 ответов

32
Лучший ответ

Конечно, стоит обратить внимание на документацию

http://docs.jquery.com/UI/Draggable#option-scroll

прокрутки

Тип: Булевский
По умолчанию: true
Если установлено значение true, контейнер автоматически прокручивается при перетаскивании.

Все, кто входит сюда, узнают из моей ошибки, RT (F) M!!!

  • 4
    впустую 2 часа действительно. Мы должны действительно RTFM
  • 0
    У меня была похожая проблема с гармошкой. У меня был перетаскиваемый элемент внутри панели аккордеона, и я хотел перетащить его за пределы аккордеона, но на панели аккордеона было установлено «переполнение», установленное на «авто», и мне так и не удалось выбраться за пределы аккордеона. Установка «scroll: false» на гармошке не помогла. В конце концов я отменил переполнение, установленное в jquery-ui. Это заставляет высоту моей панели содержимого выглядеть странно, поэтому мне пришлось использовать провод заданной высоты. И это сработало.
80

У меня была аналогичная проблема, позволяющая перетаскивать между двумя div-over-auto div. С помощью предыдущих ответов я обнаружил, что эта комбинация работает для меня (Safari 5.0.3, jquery-1.4.4, jquery-ui-1.8.7):

appendTo: 'body',
containment: 'window',
scroll: false,
helper: 'clone'
  • 11
    для меня даже просто помощник: только «клон» решил проблему
  • 0
    год помощник работал на меня тоже (самостоятельно)
Показать ещё 6 комментариев
50

appendTo

Элемент, SelectorDefault: 'parent'

Элемент, переданный или выбранный параметром appendTo, будет использоваться в качестве перетаскиваемого вспомогательного контейнера во время перетаскивания. По умолчанию хелпер добавляется в тот же контейнер, что и перетаскиваемый.

Примеры кода Инициализируйте draggable с указанной опцией appendTo.

$('.selector').draggable({ appendTo: 'body' });
  • 0
    Я попытался сделать, как вы предлагаете, но это не меняет его на желаемое поведение. Когда вы добавляете код, который вы упомянули в примере на странице Вставить корзину, он работает для вас? Спасибо
  • 3
    да, я полностью потерпел неудачу в этом вопросе. Я играл с ним в течение часа. Лучшее, что я могу получить, это то, как я это оставил, перетаскивание не работает с переполнением :(
Показать ещё 6 комментариев
18

Решение клона работает, но имеет две проблемы.

Сначала: клон присоединяется к телу. В зависимости от вашего css ваш элемент может изменять стили, так как до его запуска он внутри другого элемента и во время перетаскивания, он будет непосредственно на элементе body.

Во-вторых: Иногда элемент ДОЛЖЕН двигаться, и клон позволяет этому объекту.

Итак, решение для этих задач:

$('.selector').draggable({
    helper: 'clone',
    start: function(){
        $(this).hide();             
    },
    stop: function(){
        $(this).show()
    }
});
  • 1
    Отлично! И спасибо за подсказку о css - помогли мне решить обе проблемы.
  • 1
    Чтобы действительно имитировать «оригинальное» поведение Draggable, вы бы предпочли использовать свойство CSS «видимость»
Показать ещё 2 комментария
2

Настройка параметра прокрутки не мешает детям скрываться в области переполнения. Я придумал работу, которая использует вспомогательный вариант. Проверьте это:

http://pastebin.me/164f0a4073496563fe3179ddcec5fd6d

Также здесь приводится ссылка на другое сообщение, которое я сделал:

jquery ui перетаскиваемые элементы не перетаскиваются за пределы прокрутки div

0

Вы также можете указать, какие типы элементов вы не хотите включать.

<div class="draggable"> 
    <h2>This will drag the div</h2>
    <ul>
       <li>This won't drag the div</li>
    </ul>
</div>

Применить свойство cancel, чтобы игнорировать событие в указанных дочерних элементах

$('.draggable').draggable({cancel : 'ul'});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню