2010-08-14 3 views
7

czy można powiedzieć "przeciągalne elementy div -> no overlap"?Przenoszenie JQuery - brak nakładania się

Myślę, że głównym problemem jest pozycja: bezwzględna; ... dobrze?

rodzaj reagards Peter

+2

Witaj Peter, nie wiemy, ponieważ zapomniałeś podać przykład tego, co robisz! Możemy zgadywać, że używasz pozycji: absolutnie gdzieś, i niektórych div, ale nie wiemy nic więcej! – Fenton

Odpowiedz

5

Nie ma wbudowaną funkcję wykrywania kolizji w jQuery UI draggable, chyba że jesteś faktycznie po czymś sortowania. Najbliższą rzeczą, która jest wbudowana w to, co chcesz, jest pseudonim sortable, which looks like this.

Skrócona wersja to wykrywanie kolizji z każdym przeciągniętym elementem, nie jest trywialne pod względem wydajności (w zależności od liczby elementów), więc zostało pominięte w bibliotece, ponieważ jest bardzo rzadkim żądaniem. Możesz jednak samemu obliczyć kolizje wewnątrz draggable's drag event, jeśli naprawdę potrzebujesz wykrywania kolizji.

15

Możesz spróbować jquery-collision plus jquery-ui-draggable-collision. Pełne ujawnienie: Właśnie napisałem i wypuściłem je na sourceforge.

Pierwszy pozwala na to:

var hit_list = $("#collider").collision(".obstacle"); 

który lista wszystkich ".obstacle", które pokrywają "#collider".

Drugi pozwala na:

$("#collider").draggable({ obstacle: ".obstacle" }); 

co daje (między innymi), jest "kolizja" zdarzenie wiąże się z:

$("#collider").bind("collision", function(event,ui){...}); 

I można nawet ustawić:

$("#collider").draggable({ obstacle: ".obstacle", preventCollision: true }); 

, aby zapobiec "nakładaniu się" #collidera na jakikolwiek ".obstacle" podczas przeciągania.

+3

Nie działa w 100% z wersją jQuery 1.8.20. Alternatywą jest użycie dostarczonej wersji 1.8.12 – 321X

+1

@ 321X - dziękuję, sprawdzę, dlaczego nie działa z 1.8.20 - czy mógłbyś złożyć zgłoszenie błędu na sourceforge na przykład, proszę? – eruciform

+1

@ 321X - zaktualizowano bibliotekę. powinien teraz działać z wersją 1.8.20. – eruciform