MODUŁ 13
Galerie obrazów i pamięć podręczna w przeglądarce
PPrezentacja dla nauczyciela
Komponenty multimedialne wymagają płynnej obsługi nawigacji: przełączania slajdów w obu kierunkach, reagowania na kliknięcia w miniatury oraz zapamiętywania stanu sesji. W tym module dowiesz się, jak budować niezawodne galerie oraz utrwalać proste dane za pomocą localStorage.
Cykliczne przełączanie slajdów w galerii
Budowa karuzeli lub galerii zdjęć wymaga przechowywania aktualnego stanu w zmiennej liczbowej (np. let aktualnyIndeks = 0), która wskazuje na bieżący element tablicy grafik lub opisów.
Kluczowym wymaganiem jest prawidłowa obsługa przypadków skrajnych:
- Przejście do przodu po osiągnięciu ostatniego slajdu powinno zapętlić galerię do indeksu zerowego:
if (aktualnyIndeks >= slajdy.length) aktualnyIndeks = 0; - Cofnięcie się przed pierwsze zdjęcie (indeks mniejszy od zera) musi przenieść użytkownika na koniec kolekcji:
if (aktualnyIndeks < 0) aktualnyIndeks = slajdy.length - 1;
Do zapętlenia nawigacji w przód można również zastosować elegancki zapis z operatorem reszty z dzielenia: aktualnyIndeks = (aktualnyIndeks + 1) % slajdy.length.
const slajdy = [
{ tytul: 'Tatry Wysokie', kolor: '#3b82f6' },
{ tytul: 'Karkonosze — Śnieżka', kolor: '#10b981' },
{ tytul: 'Bieszczadzki Park Narodowy', kolor: '#f59e0b' }
];
let aktualnyIndeks = 0;
function pokazSlajd() {
const ramka = document.getElementById('ramkaZdjecia');
const licznik = document.getElementById('licznikSlajdow');
ramka.textContent = slajdy[aktualnyIndeks].tytul;
ramka.style.backgroundColor = slajdy[aktualnyIndeks].kolor;
licznik.textContent = 'Zdjęcie ' + (aktualnyIndeks + 1) + ' z ' + slajdy.length;
}
function nastepnySlajd() {
aktualnyIndeks++;
if (aktualnyIndeks >= slajdy.length) {
aktualnyIndeks = 0;
}
pokazSlajd();
}
function poprzedniSlajd() {
aktualnyIndeks--;
if (aktualnyIndeks < 0) {
aktualnyIndeks = slajdy.length - 1;
}
pokazSlajd();
}
Galeria miniatur i zmiana widoku głównego
Drugim powszechnym wzorcem w serwisach internetowych jest podgląd produktu z rzędem miniatur pod dużym zdjęciem głównym. Kliknięcie dowolnej miniatury powoduje natychmiastowe zaktualizowanie głównego kadru.
Aby przekazać dane do funkcji obsługującej, najwygodniej posłużyć się parametrem this (wskazującym na kliknięty kafelek) oraz przekazać dodatkowe argumenty lub odczytać atrybuty danych data-*.
Dla zapewnienia czytelności interfejsu skrypt powinien również oznaczyć wybraną miniaturę klasą CSS (np. aktywna), usuwając ją uprzednio ze wszystkich pozostałych kafelków za pomocą pętli forEach.
function zmienMiniature(kliknietaMiniatura, nazwaWidoku, kolorTla) {
const glowny = document.getElementById('glownyObraz');
const podpis = document.getElementById('podpisWidoku');
const wszystkieMiniatury = document.querySelectorAll('.mini-box');
wszystkieMiniatury.forEach(function(m) {
m.classList.remove('aktywna');
});
kliknietaMiniatura.classList.add('aktywna');
glowny.textContent = nazwaWidoku;
glowny.style.backgroundColor = kolorTla;
podpis.textContent = 'Wybrany kąt: ' + nazwaWidoku;
}
Zapisywanie prostego stanu w localStorage
Mechanizm localStorage umożliwia zapisywanie prostych danych (np. liczby wyświetleń, stanu koszyka czy preferowanego motywu graficznego) bezpośrednio w pamięci przeglądarki użytkownika. Dane te nie znikają po odświeżeniu ani po ponownym otwarciu karty.
Do obsługi magazynu służą metody:
localStorage.setItem(klucz, wartosc)— zapisuje wartość pod wskazanym kluczem,localStorage.getItem(klucz)— odczytuje wartość (jeśli klucz nie istnieje, zwracanull),localStorage.removeItem(klucz)— usuwa konkretną pozycję z pamięci,localStorage.clear()— czyści wszystkie klucze zapisane dla danej domeny.
Należy pamiętać, że localStorage przechowuje wyłącznie ciągi znaków (typ string). Przy operacjach arytmetycznych na zapisanych liczbach należy dokonać jawnej konwersji za pomocą Number().
function odczytajPolubienia() {
const zapisane = localStorage.getItem('polubieniaLicznik');
const wynik = document.getElementById('stanPolubien');
const stan = zapisane ? Number(zapisane) : 0;
wynik.textContent = 'Liczba polubień: ' + stan;
return stan;
}
function dodajPolubienie() {
const aktualne = odczytajPolubienia();
const nowe = aktualne + 1;
localStorage.setItem('polubieniaLicznik', nowe);
odczytajPolubienia();
}
function zresetujPolubienia() {
localStorage.removeItem('polubieniaLicznik');
odczytajPolubienia();
}
odczytajPolubienia();
Ćwiczenia
- 1Przełączanie slajdu w przód za pomocą indeksuZwiększaj indeks slajdu i podmieniaj źródło grafiki w karuzeli po kliknięciu 'Następny'.Zadanie i podpowiedzi →
- 2Cykliczne zapętlenie slajdów w karuzeliZaimplementuj zapętlenie indeksu slajdów, aby po ostatnim zdjęciu powracać do pierwszego.Zadanie i podpowiedzi →
- 3Przełączanie slajdu w tył z zapętleniemZmniejszaj indeks slajdu i przeskakuj na ostatnią pozycję, gdy indeks spadnie poniżej zera.Zadanie i podpowiedzi →
- 4Dynamiczny licznik slajdów karuzeliWyświetlaj aktualną pozycję slajdu w formacie 'Zdjęcie X z N' przy każdej zmianie.Zadanie i podpowiedzi →
- 5Galeria miniatur - zmiana zdjęcia głównegoPodmieniaj atrybut src dużego zdjęcia na kliknięcie dowolnej miniaturki z listy.Zadanie i podpowiedzi →
- 6Przenoszenie podpisu i alt z miniaturyAktualizuj atrybut alt zdjęcia głównego oraz podpis tekstowy pod zdjęciem.Zadanie i podpowiedzi →
- 7Wyróżnianie wybranej miniatury klasą aktywnaZdejmuj klasę aktywna z poprzedniej miniatury i nadawaj ją nowo klikniętej miniaturce.Zadanie i podpowiedzi →
- 8Zapisywanie wartości w localStorageZapisz podaną w formularzu nazwę użytkownika w pamięci podręcznej przeglądarki.Zadanie i podpowiedzi →
- 9Odczytywanie wartości z localStorageOdczytaj wcześniej zapisany login za pomocą getItem() i wyświetl powitanie.Zadanie i podpowiedzi →
- 10Obsługa braku klucza w localStorageZbadaj warunek getItem() === null i wyświetl odpowiedni komunikat dla gościa.Zadanie i podpowiedzi →
- 11Usuwanie wpisu metodą removeItemSkasuj zapisaną sesję użytkownika z pamięci za pomocą localStorage.removeItem().Zadanie i podpowiedzi →
- 12Trwałe zapamiętanie motywu stronyZapisuj preferencję ciemnego motywu w localStorage po kliknięciu przycisku przełączania.Zadanie i podpowiedzi →
- 13Trwały licznik kliknięć w localStorageOdczytuj, inkrementuj i zapisuj liczbę kliknięć w pamięci podręcznej przeglądarki.Zadanie i podpowiedzi →
- 14Serializacja danych do JSON w localStorageZapisuj tablicę obiektów jako ciąg tekstowy za pomocą JSON.stringify() w localStorage.Zadanie i podpowiedzi →
- 15Nawigacja punktowa (kropki) w karuzeliSteruj bezpośrednim wyborem slajdu klikając dedykowane przyciski numeryczne.Zadanie i podpowiedzi →
- 16Kompleksowa galeria z zapamiętaniem wyboru w pamięciZintegruj podmianę zdjęcia głównego z zapisem ostatnio wybranego pliku w localStorage.Zadanie i podpowiedzi →