Проблема перетягування та переповнення jQuery [закрито]


77

Я маю небажаний ефект, коли перетягую div з контейнера div, який встановлений як overflow: scroll.

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

Приклад на вставку кошика

Що трапляється, так це те, що прокрутка просто збільшена, я розумію, чому це буде бажаною поведінкою, якщо ви хочете перетягнути до пункту призначення в прокручуваному div, але я хочу мати можливість вивести її за межі схопленого схоплення.


Відповіді:


105

У мене була подібна проблема з увімкненням перетягування між двома переповненнями автоматичних div За допомогою попередніх відповідей я виявив, що ця комбінація працює для мене (Safari 5.0.3, jquery-1.4.4, jquery-ui-1.8.7):

appendTo: 'body',
containment: 'window',
scroll: false,
helper: 'clone'

12
для мене навіть просто помічник: "Клон" вирішив проблему
max4ever

року помічник теж працював у мене (самостійно)
Стеванікус

@ max4ever, якщо я включаю лише помічника: clone, це працює, хтось із інших псує це! дякую за коментар.
Thomas Dignan

1
велике спасибі, ти врятував мій день
arjuncc

2015 рік, і ця відповідь все ще хитається!
Остін Ловелл,

56

додатиTo

Елемент, SelectorDefault: 'батьківський'

Елемент, переданий або вибраний параметром appendTo, буде використаний як контейнер помічника, який можна перетягнути під час перетягування. За замовчуванням помічник додається до того самого контейнера, що і перетягуваний.

Приклади коду Ініціалізуйте перетягування із зазначеною опцією appendTo.

$('.selector').draggable({ appendTo: 'body' });

Я намагався зробити те, що ви пропонуєте, але це не змінює його на бажану поведінку. Коли ви додаєте код, який ви згадали у прикладі на сторінці Вставити кошик, чи працює це у вас? Дякую
Phill Duffy

3
так, я абсолютно не в цьому питанні. Я грався з нею цілу годину. Найкраще, що я можу отримати, - це те, як я це залишив, перетягування не працює з переповненням :(
Чад Грант,

1
Не хвилюйтесь, я ціную ваші зусилля! :)
Філл Даффі

4
+1 Це насправді спрацювало для мене.
Tamas Czinege

1
@EvoD - швидше за все, місцева точка доступу все одно просто отримує свою інформацію тут.
Thomas Dignan

36

Звичайно, варто звернути увагу на документацію

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

прокрутка

Тип: Логічне
за замовчуванням: true
якщо встановлено значення true, контейнер автоматично прокручується під час перетягування.

Всі, хто входить сюди, вчіться на моїй помилці, RT (F) M !!!


4
даремно витратив 2 години. Ми повинні дійсно RTFM
Гер

У мене була подібна проблема з баяном. Я мав можливість перетягування всередину панелі акордеону і хотів перетягнути його за межі акордеону, але на панелі акордеона було встановлено значення «перелив» на «авто», і мені ніколи не вдалося вийти за межі гармошки. Встановлення "прокрутки: помилково" на акордеоні не допомогло. Врешті-решт я відмінив переповнення, встановлене у jquery-ui. Це робить висоту моєї панелі вмісту дивною, тому мені довелося підключити задану висоту. І це спрацювало.
Asle G,

20

Клонове рішення працює, але має дві проблеми.

Перше: клон приєднується до тіла. Залежно від вашого css, ваш елемент може змінювати стилі, оскільки перед початком роботи він знаходиться всередині іншого елемента і під час перетягування він буде знаходитись безпосередньо на елементі body.

Друге: Іноді елемент ПОВИНЕН рухатись, і клон пускає об’єкт туди.

Отже, вирішенням цих проблем є:

$('.selector').draggable({
    helper: 'clone',
    start: function(){
        $(this).hide();             
    },
    stop: function(){
        $(this).show()
    }
});

1
Ідеально! І дякую за підказку щодо css - допоміг мені вирішити обидва питання.
mattanja

1
Щоб насправді імітувати «оригінальну» поведінку Draggable, ви віддаєте перевагу використанню властивості CSS «видимість»
mexique1

2

Встановлення параметра прокрутки не заважає дітям ховатися в зоні переливу. Я придумав опрацювання, яке використовує допоміжний варіант. Перевір:

http://pastebin.me/164f0a4073496563fe3179ddcec5fd6d

Також тут є посилання на інший допис, який я зробив:

jquery ui перетягувані елементи, не перетягувані за межі прокручуваного div


-1

Ви також можете вказати, які типи елементів ви не хочете включати.

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

Застосуйте це властивість скасування, щоб ігнорувати подію у вказаних дочірніх елементах

$('.draggable').draggable({cancel : 'ul'});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.