Jak dobrze zrobić pokaz slajdów w JS

Manna5

Wiem, że to jest dział HTML. Nie ma jednak działu dla JavaScriptu, ani nawet działu "Inne" (w Kompendium, na forum jest). Jako że JavaScript łączy się z HTML-em, umieściłem ten artykuł tutaj.

Jak dobrze zrobić pokaz slajdów w JS

Pokaz slajdów na stronie WWW to typowe zastosowanie JavaScriptu. Oczywistym rozwiązaniem jest podmiana obrazka, np. tak:

<HTML>
  <HEAD>
    <TITLE>Slideshow (method 1)</TITLE>
  </HEAD><BODY>
    <H2>JavaScript slideshow</H2>
    <!-- Znacznik obrazka do podmiany -->
    <P><IMG SRC="slide1.jpg"></P>
    <!-- Dołączenie naszego skryptu -->
    <SCRIPT LANGUAGE="JavaScript" SRC="slides1.js"></SCRIPT>
  </BODY>
</HTML>
// Tablica nazw plików slajdów
var slidelist = new Array (3);
// Wypełnianie tablicy
slidelist[0] = "slide1.jpg";
slidelist[1] = "slide2.jpg";
slidelist[2] = "slide3.jpg";
// Numer bieżącego slajdu i ilosć slajdów
var slidenr = 0;
var slidecount = slidelist.length;
// Obiekt slajdu
var objslide = document.images[0];
// Zmiana slajdu
function nextslide () {
  slidenr++;
  if (slidenr >= slidecount) {
    slidenr = 0;
  }
  objslide.src = slidelist[slidenr];
}
// Zegar zmieniający slajd co 2 sekundy
window.setInterval (nextslide, 2000);

Głębsze wyjaśnienia są zawarte w komentarzach. Jednak, nie jest to wcale najlepszy sposób tworzenia pokazu slajdów. Lepiej zrobić to inaczej:

<HTML>
  <HEAD>
    <TITLE>Slideshow (method 2)</TITLE>
  </HEAD><BODY>
    <H2>JavaScript slideshow</H2>
    <P>
      <!-- Osobny znacznik dla każdego slajdu -->
      <IMG CLASS="slide" SRC="slide1.jpg">
      <IMG CLASS="slide" SRC="slide2.jpg">
      <IMG CLASS="slide" SRC="slide3.jpg">
    </P>
    <!-- Dołączenie skryptu -->
    <SCRIPT LANGUAGE="JavaScript" SRC="slides2.js"></SCRIPT>
  </BODY>
</HTML>
// Tablica slajdów-obiektów
var slidelist = new Array ();
// Numer slajdu i licznik pętli
var slidenr = 0, i;
// Znajdź wszystkie slajdy
for (i = 0; i < document.images.length; i++) {
  var element = document.images[i];
  if (element.className == "slide") {
    slidelist.push (element);
  }
}
// Ilość slajdów
var slidecount = slidelist.length;
// Ukrywanie wybranego slajdu
function hideslide (nr) {
  slidelist[nr].style.display = "none";
}
// Pokazywanie wybranego slajdu
function showslide (nr) {
  slidelist[nr].style.display = "inline";
}
// Następny slajd
function nextslide () {
  // Ukryj stary slajd
  hideslide (slidenr);
  // Zwiększ numer slajdu
  if (++slidenr >= slidecount) {
    // Gdy koniec, rozpocznij na nowo
    slidenr = 0;
  }
  // Pokaż nowy slajd
  showslide (slidenr); 
}
// Ukryj slajdy poza pierwszym
for (i = 1; i < slidecount; i++) {
  hideslide (i);
}
// Zegar zmieniający slajd co 2 sekundy
window.setInterval (nextslide, 2000);

Ten skrypt jest dłuższy i bardziej złożony. Dlaczego tak? Takie podejście ma kilka zalet:

  • Nazwy i kolejność obrazków są ustalone w HTML-u. Da się też ustawić wymiary, z osobna dla każdego obrazka.
    Przy zastosowaniu metody pierwszej, nazwy obrazków są zaszyte w skrypcie.
  • Nawiązując do punktu poprzedniego, można użyć jednego skryptu do kilku pokazów slajdów na różnych podstronach.
  • Jeżeli przeglądarka nie obsługuje JavaScriptu lub użytkownik wyłączył JavaScript, zobaczy po prostu wszystkie slajdy naraz.
    Przy zastosowaniu metody pierwszej, zobaczy jedynie pierwszy slajd.

0 komentarzy