2011-08-08 15 views
5

Mam listę przedmiotów, z których każda zawiera pole wyboru. Po zaznaczeniu pola wyboru chciałbym, aby ten element został posortowany na początku listy, najlepiej animowany tak, jakby był przeciągany za pomocą myszy (ale bez kursora myszy).Jak naśladować zdarzenie sortowania z animacją za pomocą jQuery?

Czy to możliwe? W przeszłości miałem problemy z uruchamianiem przeciągalnych/sortowalnych zdarzeń. Jestem otwarty na alternatywne rozwiązania, po prostu musi być oczywiste, gdzie element został przeniesiony.

Edytuj: Początkowo próbowałem zapytać, jak zrobić to na liście sortowalnej jQuery(), ale oczywiście nie komunikowałem się tak dobrze, więc zaktualizowałem to pytanie, aby dopasować wszystkie wspaniałe odpowiedzi.

+0

Jeśli użytkownik może wybrać tylko jedno pole wyboru na raz, nie ma potrzeby stosowania "rzeczywistego" algorytmu sortowania. Po prostu przenieś nowo zaznaczony element na początek listy. – JJJ

+0

To pole wyboru nie jest przyciskiem radiowym: użytkownik może wybrać dowolną liczbę. Chodzi o to, aby przenieść wszystkie zaznaczone elementy na początek, aby były pogrupowane. – peterjwest

Odpowiedz

6

podobne do drugiego przykładu avetarman, ten skrzypce nie czeka na nowo zaznaczone pole, aby osiągnąć szczyt przed innymi te wziąć należne im miejsce. Zamiast tego, wszystkie one uzyskać animowane razem:

http://jsfiddle.net/ebiewener/Y5Mdt/1/

Ostatecznie, to wszystko o dawaniu wiersz ruszasz bezwzględną pozycję tak, że może ślizgać się nad innych wierszy, dając niezbędne CSS atrybuty te pozostałe wiersze, aby nie wyskoczyły natychmiast z miejsca, gdy wybrany wiersz zostanie usunięty z obiegu dokumentów z pozycjonowaniem bezwzględnym. Po wykonaniu tego, wybrany wiersz traci absolutne pozycjonowanie, ale jest dołączany na początku wierszy. Pozwala to na całkowite "zresetowanie" css, dzięki czemu można kontynuować wybieranie nowych wierszy.

+0

Dobra robota. Spędziłeś czas na tym, co?:-) – avetarman

+2

Poświęcając czas na tworzenie i tworzenie modułów Drupala, potrzebuję ciągłych 10-minutowych przerw w szachach online lub jQuery, aby utrzymać przepływ krwi w mojej głowie :) – maxedison

+1

Chciałbym również zwrócić uwagę, że jeśli w jQuery działa się dobrze, wiele interfejsów jQuery nie jest już potrzebny. Wydaje mi się, że łatwiej jest zastosować własne niestandardowe rozwiązania, niż dowiedzieć się, jak działa określona funkcja interfejsu jQuery, a wyniki często będą zawierały kod, który lepiej zrozumiesz, i funkcjonalność, która jest naprawdę dostosowana do potrzebnych specyfikacji. – maxedison

2

jQuery ui ma animację transfer.

Szybkie jsfiddle tutaj.

Możesz użyć tego, aby imitować sortowanie, a następnie na wywołanie zwrotne przenieść faktyczne pole wyboru. Będę aktualizował wersję demo, kiedy wrócę do domu, aby użyć listy pól wyboru do sortowania.

+0

dzięki za to. jeszcze tego nie używałem. :) – naveen

-1

Spróbuj tego.

$('#mytest li').click(function() { 
 
    var $this = $(this); 
 
    if ($this.children("input:checked")) { 
 
     $this.effect("transfer", { 
 
      to: $this.parent().find(":first-child") 
 
     }, 1000); 
 
     $this.remove(); 
 
     $(this).prependTo("#mytest"); 
 
    }  
 
});
.ui-effects-transfer { 
 
    border: 2px solid black; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.js"></script> 
 
<ul id="mytest"> 
 
    <li><input type="checkbox" id="check1" /><label for="check1">One</label></li> 
 
    <li><input type="checkbox" id="check2" /><label for="check2">Two</label></li> 
 
    <li><input type="checkbox" id="check3" /><label for="check3">Three</label></li> 
 
    <li><input type="checkbox" id="check4" /><label for="check4">Four</label></li> 
 
    <li><input type="checkbox" id="check5" /><label for="check5">Five</label></li> 
 
    <li><input type="checkbox" id="check6" /><label for="check6">Six</label></li> 
 
    <li><input type="checkbox" id="check7" /><label for="check7">Seven</label></li> 
 
    <li><input type="checkbox" id="check8" /><label for="check8">Eight</label></li> 
 
    <li><input type="checkbox" id="check9" /><label for="check9">Nine</label></li> 
 
    <li><input type="checkbox" id="check10" /><label for="check10">Ten</label></li> 
 
</ul>

Demo tutaj: http://jsfiddle.net/naveen/gLBjt/

Zastrzeżenie: Jest to zasadniczo port roztworu @redsquare. :)

Powiązane problemy