Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][CSS][HTML]Prosta animacja galerii w jQuery
Forum PHP.pl > Forum > Przedszkole
Moodey
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
kamil4u
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
Moodey
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?
kamil4u
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 )
Moodey
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.
kamil4u
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) --
Moodey
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<<<
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.