Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][CSS][HTML]Prosta animacja galerii w jQuery, Prosta animacja galerii w jQuery
Moodey
post 15.02.2012, 17:21:23
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 15.02.2012

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


Witam,

Dopiero zaczynam zabawę programowaniem, a wybrałem na to JavaScript. Po zapoznaniu się z podstawowymi zasadami tworzenia czegokolwiek w tym języku chcę również poznać "gotowca" jakim jest framework jQuery. Jednakże dopadł mnie brak praktyki i po usiłowaniu stworzenia galerii na stronie opartej na identycznym kodzie html i css i sposobie animacji w JQ jednakże działających niezależnie względem siebie otrzymuje problem nie do przeskoczenia na moim poziomie. Próbowałem wprowadzać dodatkowe klasy pomocnicze w JS/JQ do już oklasowanych wcześniej elementów i mimo to nie chcą się dodać, próbowałem operować na położeniu obiektów w DOM ale i to odmówiło mi posłuszeństwa. Domyślam się, że zmiana klas strzałek to konieczność no ale tutaj właśnie jest moje zapytanie. Jak przerobić mój kod podany poniżej tak aby te galerie oparte były na tym samym kodzie animacji i hmtl ale pracowały niezależnie względem siebie? zależy mi na nie zmienianiu czystego html, a ewentualnej przeróbce tego kodu w JS/JQ.


  1.  
  2. <div class="gal-container">
  3. <div class="arow-left"></div>
  4. <div class="window">
  5. <ul class="gal">
  6. <li class="gal-item"><img src="images/empty.jpg" alt="" /></li>
  7. <li class="gal-item"><img src="images/empty.jpg" alt="" /></li>
  8. <li class="gal-item"><img src="images/empty.jpg" alt="" /></li>
  9. <li class="gal-item"><img src="images/empty.jpg" alt="" /></li>
  10. <li class="gal-item"><img src="images/empty.jpg" alt="" /></li>
  11. <li class="gal-item"><img src="images/empty.jpg" alt="" /></li>
  12. <li class="gal-item"><img src="images/empty.jpg" alt="" /></li>
  13. </ul>
  14. </div>
  15. <div class="arow-right"></div>
  16. </div>
  17.  
  18. <div class="gal-sep"></div>
  19.  
  20. <div class="gal-container">
  21. <div class="arow-left"></div>
  22. <div class="window">
  23. <ul class="gal">
  24. <li class="gal-item"><img src="images/empty.jpg" alt="" /></li>
  25. <li class="gal-item"><img src="images/empty.jpg" alt="" /></li>
  26. <li class="gal-item"><img src="images/empty.jpg" alt="" /></li>
  27. <li class="gal-item"><img src="images/empty.jpg" alt="" /></li>
  28. <li class="gal-item"><img src="images/empty.jpg" alt="" /></li>
  29. <li class="gal-item"><img src="images/empty.jpg" alt="" /></li>
  30. <li class="gal-item"><img src="images/empty.jpg" alt="" /></li>
  31. </ul>
  32. </div>
  33. <div class="arow-right"></div>
  34. </div>
  35.  



  1. div.gal-container {
  2. position: relative; margin: 0 auto;
  3. width: 948px; height: 236px;
  4. }
  5.  
  6. /* maskowanie lini zdjęć */
  7.  
  8. div.window {
  9. position: absolute; overflow: hidden;
  10. left: 48px;
  11. width: 850px; height: 236px;
  12. }
  13.  
  14. /* linia zdjęć */
  15.  
  16. ul.gal {
  17. position: absolute;
  18. height: 236px; width: 10000px;
  19. left: -40px; /* omijanie CSS3 na margin-left dla gal-item*/ /* przesuwanie */
  20. }
  21.  
  22. li.gal-item img {
  23. display: block;
  24. margin-left: 40px;
  25. float: left;
  26. }
  27.  
  28. div.arow-left {
  29. display: block; width: 38px; height: 236px;
  30. background: url(images/arrow-l.png) no-repeat;
  31. float: left;
  32. margin: 0; padding: 0;
  33. }
  34.  
  35. div.arow-right {
  36. display: block; width: 38px; height: 236px;
  37. background: url(images/arrow-r.png) no-repeat;
  38. float: right;
  39. margin: 0; padding: 0;
  40. }
  41.  
  42.  
  43. div.gal-sep {
  44. width: 1200px; height: 96px;
  45. background: url(images/gal-sep.jpg) no-repeat;
  46. clear: both;
  47. margin: 0 auto;
  48. }



[JAVASCRIPT] pobierz, plaintext
  1.  
  2. $(document).ready(function() {
  3.  
  4. var $galeria = $('.gal-container');
  5. var $liniaobrazkow = $('ul.gal');
  6. var $lewy = $('.arow-left');
  7. var $prawy = $('.arow-right');
  8.  
  9. var przesun = 0;
  10.  
  11.  
  12. $prawy.click(
  13. function(){
  14. if(przesun > -1800 ) {
  15.  
  16. przesun -=900;
  17. $liniaobrazkow.animate({
  18. left: -40 + przesun
  19. })
  20. }
  21. } );
  22.  
  23.  
  24. $lewy.click(
  25. function(){
  26. if (przesun<0) {
  27.  
  28. przesun +=900;
  29. $liniaobrazkow.animate({
  30. left: -40 + przesun
  31. })
  32. }
  33. } );
  34.  
  35.  
  36. });
  37.  
  38.  
[JAVASCRIPT] pobierz, plaintext



PS: Temat pewnie przewija się od czasów wynalezienia koła ale mój mózg już nie potrafi wymyślić odpowiedniego zapytania w opcji "szukaj". Przepraszam z góry i jeśli temat juz był byłbym wdzięczny za odsyłacz.


Pozdrawiam,
-Moodey

Ten post edytował Moodey 15.02.2012, 17:25:47
Go to the top of the page
+Quote Post
kamil4u
post 15.02.2012, 17:50:42
Post #2





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

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


Zrób to tak:
- pobierz tylko <div class="gal-container"> do zmiennej
- jako, że jQuery robi i z tego tablicę( masz kilka elementów, które mają taką klasę ) to wertujesz po wszystkich ( each )
- teraz poznajesz magiczne słówko this, które zawsze w obrębie each wskazuje na aktualny element
- następnie przerabiasz cały swój kod:
a ) przyciski lewy, prawy itd. wyszukujesz właśnie w tym elemencie: czyli $( this ).pobierzDzieci( ',lewyPrzycisk')
B ) reszta kodu praktycznie bez zmian, a jak już to na tyle proste, że sobie poradzisz

Ten post edytował kamil4u 15.02.2012, 17:50:53


--------------------
Go to the top of the page
+Quote Post
Moodey
post 16.02.2012, 15:03:15
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 15.02.2012

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


Cytat(kamil4u @ 15.02.2012, 17:50:42 ) *
Zrób to tak:
- pobierz tylko <div class="gal-container"> do zmiennej
- jako, że jQuery robi i z tego tablicę( masz kilka elementów, które mają taką klasę ) to wertujesz po wszystkich ( each )
- teraz poznajesz magiczne słówko this, które zawsze w obrębie each wskazuje na aktualny element
- następnie przerabiasz cały swój kod:
a ) przyciski lewy, prawy itd. wyszukujesz właśnie w tym elemencie: czyli $( this ).pobierzDzieci( ',lewyPrzycisk')
B ) reszta kodu praktycznie bez zmian, a jak już to na tyle proste, że sobie poradzisz



Dziękuje smile.gif to na pewno mi pomoże wink.gif) wygląda prosto i logicznie i przede wszystkim sensownie smile.gif)))) postaram się poinformować jak mi poszło jak rozwiąże problem smile.gif)

EDIT:

Hmm... mam problem... bo o ile dobrze zrozumialem chodziło bym zrobił to tak:

[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function() {
  2.  
  3. var $galeria = $('div.gal-container');
  4. //var $liniaobrazkow = $('ul.gal');
  5. //var $lewy = $('.arow-left');
  6. //var $prawy = $('.arow-right');
  7.  
  8.  
  9. $.each($galeria, function () {
  10.  
  11.  
  12. var $liniaobrazkow = $(this).children('.gal');
  13. var $lewy = $(this).children('.arow-left');
  14. var $prawy = $(this).children('.arow-right');
  15.  
  16.  
  17. var przesun = 0;
  18.  
  19. $prawy.click(
  20. function(){
  21. if(przesun > -1800 ) {
  22.  
  23. przesun -=900;
  24. $liniaobrazkow.animate({
  25. left: -40 + przesun
  26. })
  27. }
  28. } );
  29.  
  30.  
  31. $lewy.click(
  32. function(){
  33. if (przesun<0) {
  34.  
  35. przesun +=900;
  36. $liniaobrazkow.animate({
  37. left: -40 + przesun
  38. })
  39. }
  40. } );
  41.  
  42.  
  43. });
  44.  
  45.  
  46. });
[JAVASCRIPT] pobierz, plaintext


niby kod w przeglądarce nie wywala błędów, a mimo to nie działa...

co robię nie tak?

Ten post edytował Moodey 16.02.2012, 20:36:17
Go to the top of the page
+Quote Post
kamil4u
post 16.02.2012, 23:09:47
Post #4





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

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


Umieść to online z obrazkami. W całości.

Wydaje się, że jest dobrze( nie sprawdzałem warunków animacji, więc może tu jest błąd )


--------------------
Go to the top of the page
+Quote Post
Moodey
post 17.02.2012, 03:30:23
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 15.02.2012

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


Cytat(kamil4u @ 16.02.2012, 23:09:47 ) *
Umieść to online z obrazkami. W całości.

Wydaje się, że jest dobrze( nie sprawdzałem warunków animacji, więc może tu jest błąd )



Cały kod strony online znajduje się <<tutaj>>

PS: strona jeszcze nie była jeszcze optymalizowana pod kątem przeglądarek za co przepraszam - działa poprawnie pod google chrome.

Ten post edytował Moodey 17.02.2012, 03:41:01
Go to the top of the page
+Quote Post
kamil4u
post 17.02.2012, 21:13:29
Post #6





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

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


Zacznijmy od tego, że brakuje 'px' przy w animate.
I zmienna przesun jest niepotrzebna, gdyż możesz wykorzystać własność funkcji animate += lub -=.

--po zamianach wrzuć wynik na serwer, jeżeli nadal nie będzie działać--
--zrób sobie jeszcze test czy w ogóle działa zdarzenie click na tych elementach - zamień całą funkcję na alert-a (tu tylko napisz, czy działało i nie wrzucaj na serwer) --


--------------------
Go to the top of the page
+Quote Post
Moodey
post 17.02.2012, 22:39:38
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 15.02.2012

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


Ha! udało mi się znaleźć błąd! smile.gif) już wszystko działa jak trzeba smile.gif))


chodziło o tą deklaracje elementu:
[JAVASCRIPT] pobierz, plaintext
  1. var $liniaobrazkow = $(this).children('.window').children('.gal');
[JAVASCRIPT] pobierz, plaintext


Jak widzisz ani ja ani Ty nie dopatrzyliśmy się tak przyziemnego błędu w pobraniu elementu html smile.gif), a mianowicie klasa .gal była dodatkowo zagnieżdżona w divie o klasie .window i dlatego nie łapało i padało już na samej funkcji animate smile.gif


Dziękuje za pomoc i zaangażowanie ! smile.gif) Wiele się nauczyłem.. min. nauczyłem się korzystać z manuala co ułatwi mi życie smile.gif

PS: efekt poprawki zobaczysz >>>tutaj<<<

Ten post edytował Moodey 17.02.2012, 22:40:51
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2025 - 00:49