Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] slider + animacja css
Forum PHP.pl > Forum > Przedszkole
d4ng
Witajcie, dzisiaj mam do zrobienia slider w jQuery (to wymóg!) z jakąś animacją css. Z tego co zauwazyłem jQuery ma gotowe funkcje typu slide i animate tylko to talnie nie wiem jak to wszystko zebrac do kupy... Divy maja się zmieniac i np. każdej zmianie ma towarzyszyć zmiana opacity (efekt przenikania) bądź możecie użyc innego efektu css grunt żebym wiedział o co chodzi... Z góry dziękuje i pozdrawiam smile.gif

  1. <div id="slider">
  2. <div class="slide">
  3. <img src="images/top.jpg" alt="Top" />
  4. <p>Witamy na stronie luksusowego sklepu nazwa sklepu. W swojej bogatej ofercie posiadamy xyz... </p>
  5. </div>
  6. <div class="slide">
  7. <img src="images/top2.jpg" alt="Top" />
  8. <p>Kolejna treść newsa... Miejmy nadzieje że zakupy w naszym sklepie będą dla Państwa przyjemnością...</p>
  9. </div>
  10. <div class="slide">
  11. <img src="images/top3.jpg" alt="Top" />
  12. <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa.</p>
  13. </div>
  14. </div>
vonski
Nad kilkoma rzeczami musisz się zastanowić zanim zaczniesz implementować slider.

Czy animacja będzie się wykonywać automatycznie, czy tylko na kilk użytkownika. Czy tylko automatycznie? Czy jedno i drugie? smile.gif Czy nawigacją będzie tylko prev/next, czy chces mieć też numery konkretnych slajdów. Czy też zmiana slajdu będzie następowała po prostu po kliknięciu w slajd?

Najprostszy slajder:

  1. $(function() {
  2. var num_of_slides = 3;
  3. var current_slide = 1;
  4.  
  5. $('.slide').click(function() {
  6. if(current_slide == num_of_slides) {
  7. // jesli aktualnie pokazywany jest ostatni slajd, schowaj go, ustaw licznik na 1 i pokaz pierwszy slajd
  8. } else {
  9. // schowaj aktualnie pokazywany slajd
  10. $('.slide[data-slide=' + current_slide + ']').fadeOut(600);
  11.  
  12. // dodaj 1 do licznika i pokaz kolejny slajd za pomoca funkcji fadeIn()
  13. }
  14. });
  15. });


Jak widzisz ilość slajdów jest wpisana "z palca", jeśli chcesz by jQuery automatycznie zliczało ile jest slajdów na stronie, zainstersuj się funkcją size().
Do tego musisz dodać do swojego kodu HTML atrybut data-slide="[numer slajdu]" do każdego diva klasy "slide". Oczywiście można i to zautomatyzować, tylko po co, jak HTML5 daje nam właśnie data-* smile.gif
Założenie powyżego slajdera jest takie, że slajdy zmieniają się tylko do przodu (chyba że aktualnie wyświetlany jest ostatni slajd, wtedy wraca na początek) i tylko po kliknięciu w dany slajd.
Jeśli chcesz coś bardziej zaawansowanego.. musisz pokombinować smile.gif Jeśli np. chcesz zrobić automatyczną animację, wskazówką może być funkcja setInterval()
d4ng
super ekstra fantastycznie ;D tylko powiedz mi jak moge zastosować do tego jakis efekt css (np. coś z opacity)?
vonski
Jeśli chcesz kontrolować efekty przejścia za pomocą CSS, możesz dodać do klasy .slide właściwość transition, nadać wszystkim .slide opacity 0 i stworzyć nową klasę, np. .slide-active z opacity:1

  1. .slide {
  2. transition: all 0.5s ease-in-out;
  3. opacity: 0;
  4. }
  5.  
  6. .slide-active {
  7. opacity: 1;
  8. }


I teraz musisz trochę zmodyfikować ten kod co podałem wcześniej, a mianowicie wywalić wywołanie funkcji fadeOut() / fadeIn(), bo zamiast nich będziesz używał addClass('slide-active') do pokazywania slajdu i removeClass() do chowania.
Oczywiście w definicji transition możesz pokombionować z różnymi "easing functions" (ja użyłem ease-in-out) jak też czasem trwania przejścia itd.
d4ng
Mam jeszcze małe pytanko, bo próbowałem zaimplementować ten kod

  1. $(function() {
  2. var num_of_slides = 3;
  3. var current_slide = 1;
  4.  
  5. $('.slide').click(function() {
  6. if(current_slide == num_of_slides) {
  7. // jesli aktualnie pokazywany jest ostatni slajd, schowaj go, ustaw licznik na 1 i pokaz pierwszy slajd
  8. } else {
  9. // schowaj aktualnie pokazywany slajd
  10. $('.slide[data-slide=' + current_slide + ']').fadeOut(600);
  11.  
  12. // dodaj 1 do licznika i pokaz kolejny slajd za pomoca funkcji fadeIn()
  13. }
  14. });
  15. });


tzn dodałem do divów data-slide"wartość" ale i tak widać wszystkie divy 1 pod drugim.

Rozumiem że w linijce 7 mam dodać coś w stylu display none, jak się teraz do tego odwołać...
vonski
Slajdy pokazują się jeden pod drugim, bo trzeba je odpowiednio wypozycjonować smile.gif Najlepiej użyć do tego po prostu position. Wkładasz wszystkie div.slide z jeden kontener, np. <div class="slider"><-- slajdy --></div> nadajesz mu position inne niż static (np. position: relative), a div.slide pozycjonujesz za pomocą position: absolute:

  1. .slider {
  2. position:relative;
  3. }
  4. .slide {
  5. transition:all 0.5s ease-in-out;
  6. opacity:0;
  7. position:absolute;
  8. top:0;
  9. left:0;
  10. }
  11. .slide-active {
  12. opacity:1;
  13. }
  14.  
  15. <div class="slider">
  16. <div class="slide slide-active" data-slide="1">...</div>
  17. <div class="slide" data-slide="2">...</div>
  18. ...
  19. </div>


Generalnie bazowo każy slajd jest niewidoczny (opacity:0) i są one nałożone jeden na drugi (position:absolute;top:0;left:0). Pierwszy slajd będzie się jednak pokazywał, bo dajesz mu na start klasę "slide-active".
Teraz jeśli chodzi o pokazywanie i chowanie slajdów, nie musisz dawać display:none; - zamiast tego kontrolujesz to za pomocą klasy slide-active, czyli w 7-mej linijce tego przykładowego kodu JS dajesz coś w stylu:

  1. $('.slide[data-slide=' + current_slide + ']').removeClass('slide-active');


Przez to "zabierasz" temu slajdowi opacity:1
Żeby pokazać slajd robisz analogicznie, tylko zamiast removeClass('slide-active') używasz addClass('slide-active')
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.