Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Slideshow z wieloma funkcjami *tylko JS*
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
karamelek
Hej,
przychodzę do Was z moim problemem. Otóż mam jako zadanie domowe napisać (bez użycia gotowych rozwiązań, Lightboxów, JQuery i bibliotek JS z Internetu) Slider, Slideshow zdjęć okazów motyli do mojej strony internetowej. Jest w sieci sporo rozwiązań ale żadno nie do końca odpowiada temu, co jest wymagane i zwykle ma jakiś plugin lub działa dzięki pomocy w.w. dodatków.
Sama coś napisałam, jednak jeszcze nie do końca działa to jak powinno.

Otóż ten Slider:
- powinien prezentować zdjęcia okazów z odpowiadającym podpisem
- powinien przy odswieżeniu lub pierwszym wejściu powinien wyświetlić się przypadkowo wylosowany okaz (tego jeszcze nie mam – tu zapewne trzeba pracować z Math.random)
- powinien zawierać przycisk do sterowania – dalej i wstecz
- powinien mieć wyłączony przycisk dalej przy zdjęciu ostatnim oraz wyłączony przycisk wstecz przy pierwszym (prawie działa, chociaż w moim Sliderze tak jakby nie było końca i po ostatnim zdjęciu pokazuje się pierwsze a powinno się zatrzymać)
- powinien „lecieć” dalej ze slajdami, jeśli użytkownik nie użyje żadnego z dwóch przycisków przez 3 sekundy (takie automatyczne przewracanie slajdów). Jeśli zaś użyje przycisku – logicznie automatyczne przełączanie powinno być zdeaktywowane.


Da się zrobić coś takiego przy pomocy tylko JS i HTML , bez żadnych dodatków?

Mój kod prezentuje się tak:

HTML
  1. <head>
  2. <meta charset="UTF-8">
  3. <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  4. <title>Motyle</title>
  5. </head>
  6. <body onload="sliderAuto()">
  7. <section class="containerSlider">
  8. <div id="okazy">
  9. <img src="media/slideshow/expo-1.jpg" id="slide" width="100%"></img>
  10. <div id="nameExponat">
  11. <p id="okazPodpis">Podpis eksponatu</p>
  12. </div>
  13. <form action="#" id="buttonNavi">
  14. <button type="button" onClick="slider(-1)" id="wstecz">&lt;&lt;</button>
  15. <button type="button" onClick="slider(1)" id="dalej">>></button>
  16. </form>
  17. </div>
  18. </section>
  19. </body>
  20. </html>


i JS
  1. var licznik;
  2. var wszyZdj;
  3. licznik = 1;
  4. wszyZdj = 4;
  5.  
  6. var captionText = new Array(
  7. "Podpis1",
  8. "Podpis2",
  9. "Podpis3",
  10. "Podpis4"
  11. )
  12.  
  13. window.setInterval(fuonction sliderAuto( x ){
  14. var image = document.getElementById('slide');
  15. licznik = licznik + 1;
  16. if(licznik > 4){ licznik = 1;}
  17. if(licznik < 1){ licznik = 4;}
  18. image.src="media/slideshow/expo-"+ licznik +".jpg";
  19. document.getElementById("okazPodpis").innerHTML = captionText[licznik];
  20. },3000);
  21.  
  22. function slider( x ){
  23. var image = document.getElementById('slide');
  24. licznik = licznik + x;
  25. if(licznik > 4){ licznik = 1;}
  26. if(licznik < 1){ licznik = 4;}
  27. image.src="media/slideshow/expo-"+ licznik +".jpg"
  28. buttons();
  29. }
  30.  
  31. function buttons() {
  32. document.getElementById('dalej').disabled = licznik >= wszyZdj;
  33. document.getElementById("wstecz").disabled = licznik <= wszyZdj;
  34. }


Nie wiem czy jest prawidłowy w samym pomyśle, ale jeśli trzeba zacząć na nowo zupełnie inaczej to zrobię tak smile.gif

Będę bardzo wdzięczna za odpowiedzi, rozwiązania i porady smile.gif

Pozdrawiam
Karamelek
Comandeer
Cytat
Da się zrobić coś takiego przy pomocy tylko JS i HTML , bez żadnych dodatków?

Jasne, że się da wink.gif

Zacznijmy od tego, że podszedłbym do problemu nieco inaczej. Umieściłbym w kodzie HTML elementy dla każdego slajdu (czyli obrazek + podpis) - najlepiej w liście. Następnie przy wczytaniu strony ukryłbym wszystkie elementy listy i pokazał losowy (losowanie można zrobić przy pomocy: http://javascript.pl/articles/losowa-liczb...go-zakresu.html - zakres to od 0 do tablicaElementow.length - 1).

Blokowanie przycisków prosto zrobić na liczniku (w gruncie rzeczy masz to). Natomiast zmianę slajdów zrobiłbym na rekurencyjnym setTimeout (jakoś tak mi się to wydaje bardziej do kontrolowania). Oczywiście musisz se zapisać timer id do zmiennej, żeby go przerwać:
Kod
var timerId = setTimeout(function() {}, 1000);

//i jak ktoś pacnie button to:
clearTimeout(timerId);
karamelek
Z racji tego, ze nie bedzie wiecej niz 6 slajdow i tak, lepiej bedzie chyba mi od razu uzyc

Kod
Math.floor(Math.random() * 6) + 1

tylko jak to wszystko do kupy zlozyc czarodziej.gif
Comandeer
Jest pewna różnica między "nie więcej niż 6" oraz "dokładnie 6" - takie losowanie będzie działać tylko i wyłącznie w drugim przypadku.
karamelek
Rozumiem. Pobawie sie tym i dam znac, chyba, ze masz jeszcze jakies pomysly. Moglabym wyslac caly kod (jest troche wiecej tego) ale na priv, bo nie chce dawac rozwiazan tak publicznie (ach te zadania szkolne) oneeyedsmiley02.png
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.