Budeme pokračovat v předchozím cvičení. Vytvoříme komponentu pro zobrazování textu píšničky a naučíme ji scrollovat na aktuální řádek textu.
- V repozitáři se zadáním najdete soubor
lyrics-lines.jsobsahujcí text písničky Lemon Tree. Vložte tento soubor dosrcvašeho projektu. - Vytvořte komponentu
Lyrics, která v prop s názvemlinesbude očekávat data ve formátu jaký vídíte v souborulyrics-lines.je. Komponenta zobrazí jednotlivé řádky textu pod sebou jak je naznačeno v repozitáři se zadáním. - V souboru hlavní komponenty
Appimportujte objekt ze souborulyrics-lines.jsa předejte jej komponentěLyrics. Nyní byste na stránce měli vidět text celé písničky. - Komponenta
Lyricsbude mít ještě jednu prop s názvemcurrentLineIndex. Ta bude udávat, který řádek textu má být zvýrezněn pomocí CSS třídycurrent-line. - V komponentě
Appvytvořte stav uchovávající index právě aktivního řádku. Zatím jej nastavte na libovolné číslo. Stav předejte komponentěLyricsa vyzkoušejte, že dokážete zvýraznit řádek na libovolném indexu. - Nyní budeme chtít, aby komponenta
Lyricsodscrollovala na zvýrazněný řádek. K tomu bude potřeba založit ref, kterou nastavíme na aktuálně zvýrazněný řádek. - Vyrobte efekt, který byde reagovat na změnu prop
currentLineIndex. Pomocí vámi vytvořené ref zavolá na elementu s aktuálním řádkem metoduscrollIntoView. Aby metoda hladce odscrollovala na začátek rodičovského prvku, poradíme, že je ji potřeba zavolat takto:scrollIntoView({ block: 'start', inline: 'nearest', behavior: 'smooth', }); - Vyzkoušejte, že když v hlavní komponentě
Appzměníte stav s aktulním indexm řádku, komponentaLyricsodscrolluje na správný řádek a zvýrazní jej.