Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][jQuery] Drag'n'Drop
Novy.
post
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 8
Dołączył: 28.10.2011

Ostrzeżenie: (0%)
-----


Siema, próbuje napisać ekwipunek na zasadzie drag'n'drop.

Wszystko jest ok, tylko kiedy złapie jakis item, i postawie go na zajętym polu, to można go tam upuścić.

Wiem, że w php da się sprawdzić czy pole jest zajęte, ale chciałbym to zablokować w samym jsie, bo jak już coś robić to dobrze, a nie na "odwal się".

Problem rozwiązany więc kod nie jest potrzebny - usuwam (IMG:style_emoticons/default/smile.gif)

Ten post edytował Novy. 1.12.2012, 14:29:05
Go to the top of the page
+Quote Post
kamil4u
post
Post #2





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Nie zanalizowałem kodu.

Te pola to pewnie "div-y", lub lista*. Gdy jest już jakiś element w ekwipunku( na konkretnym miejscu ) to zmieniaj klasę tego div-a( li ), aby wiedzieć, że coś tam jest. I teraz w przypadku gdy puszczasz element na div-a, który ma daną klasę to nie pozawalasz na daną operację, jeżeli nie ma nadanej klasy to wrzucasz dany element w to miejsce.

Ew. jak nie trawiłem z odp. to opisz problem dokładnie, ale nie wstawiając kod, tylko słownie.

*Lista byłaby lepsza.
Go to the top of the page
+Quote Post
Novy.
post
Post #3





Grupa: Zarejestrowani
Postów: 50
Pomógł: 8
Dołączył: 28.10.2011

Ostrzeżenie: (0%)
-----


Z dokumentacji jQuery ui, wyczytałem, że jest jakaś opcja w samym droppable. Tylko chyba nie potrafie jej dobrze użyc. (Kiedy puszczam na zajęty, to item wraca na poprzednie miejsce.)

Może zerknąłbyś jednak na ten kod ?(IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kamil4u
post
Post #4





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


No to tak jak pisałem:
Kod
    if($id_itemu > 0){
echo '
<div class="inventory" style="background:url(./img/inv/slot.png); width:41px; height:41px;float:left;">
<img src="./img/inv/'.$ikony[$id_itemu].'.png" id="'.$id_itemu.'" class="item"/>
</div>';
}
else{
echo '<div class="inventory" style="background:url(./img/inv/slot.png); width:41px; height:41px;float:left;"></div>';

Dodaj do tego jeszcze klasę - "zajęte", "wolne"

Teraz używasz tego w zależności od klasy: http://jqueryui.com/droppable/#revert
Jeszcze tylko poczytanie tego: http://api.jqueryui.com/droppable/#option-accept

I masz gotowy skrypt. Pytaj jak czegoś nie wiesz, ale najpierw popróbuj i poczyta API
Go to the top of the page
+Quote Post
Novy.
post
Post #5





Grupa: Zarejestrowani
Postów: 50
Pomógł: 8
Dołączył: 28.10.2011

Ostrzeżenie: (0%)
-----


Szczerze? Ciężko mi to ogarnąc, bo przecież klasa już jest nadana, w dodatku funkcja itemInSpot, dodaje do class ui-dropped/dragged :/

Za mało ogarniam jquery widocznie, no nic. i tak dzięki za pomoc (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kamil4u
post
Post #6





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Cytat
Ciężko mi to ogarnąc, bo przecież klasa już jest nadana

Może być nadane wiele klas -> class="klasa1 klasa2 klasa3" -> czyli kolejne klasy oddzielone spacjami

Jak dobrze rozumiem, to ta funkcja powyżej( tą co zacytowałem ) "ładuje" przedmioty, czyli w if musisz dopisać klasę "zajęte", a w else "wolne".

Próbuj dalej i się nie poddawaj. W razie problemów wstaw kod na serwer lub tutaj: http://jsfiddle.net/

Tylko:
- to ma być demo - nie ładuj tam swojego całego kodu
- bez PHP - kod już wygenerowany, czyli taki jak w źródle strony
- kod ma być jak najprostszy, czyli tylko najważniejsze rzeczy - problem dotyczy JS - PHP tylko namiesza
- w inwentarzu tylko kilka pół - po co analizować kilkanaście na raz
- komentarze w najważniejszych miejscach
- najważniejsze, żebyś pokazał, że coś próbowałeś sam zrobić

Zawsze mi się łatwiej pomaga jak mogę samemu coś pozmieniać, zobaczyć jak to działa.
Pozdrawiam

Ten post edytował kamil4u 1.12.2012, 00:10:37
Go to the top of the page
+Quote Post
Novy.
post
Post #7





Grupa: Zarejestrowani
Postów: 50
Pomógł: 8
Dołączył: 28.10.2011

Ostrzeżenie: (0%)
-----


Okej, rozumiem Twój pomysł z tą klasą zajety/wolny.

Tylko mam kilka niejasności. Jeśli zdejmiemy z jakiegoś miejsca przedmiot i przeniesiemy go na wolne, to to stare miejsce bedzie dalej mialo klase zajete.

Wiec pytanie, jak zmienić klasę miejsca z którego zdjeliśmy item? Bo nadać klase zajety potrafie, ale zmienić zajęty na wolny już nie (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
kamil4u
post
Post #8





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


http://jqueryui.com/draggable/#events - zdarzenie start. I odwołujesz się do rodzica elementu drag&drop, czyli <div> i zmieniasz mu klasę.
Go to the top of the page
+Quote Post
Novy.
post
Post #9





Grupa: Zarejestrowani
Postów: 50
Pomógł: 8
Dołączył: 28.10.2011

Ostrzeżenie: (0%)
-----


Udało się bez kombinowania z eventami (IMG:style_emoticons/default/biggrin.gif)

Wystarczyło zedytować funkcje ItemInSpot, nie wiem czemu o tym wcześniej nie pomyślałem.

Przed zmiana miejsca sprawdzam czy dany spot jest zajety czy nie (szukam tagu img w divie). Jeśli znalazlo tag img to odsyłam dragowany element na poprzednie miejsce (IMG:style_emoticons/default/wink.gif)

Cała filozofia, ale dzięki za wszystko. W pewnym momencie już miałem sobie odpuścić, ale postanowiłem popróbować i nie żałuje!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.09.2025 - 17:31