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.js
obsahujcí text písničky Lemon Tree. Vložte tento soubor dosrc
vašeho projektu. - Vytvořte komponentu
Lyrics
, která v prop s názvemlines
bude 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
App
importujte objekt ze souborulyrics-lines.js
a předejte jej komponentěLyrics
. Nyní byste na stránce měli vidět text celé písničky. - Komponenta
Lyrics
bude 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ě
App
vytvořte stav uchovávající index právě aktivního řádku. Zatím jej nastavte na libovolné číslo. Stav předejte komponentěLyrics
a vyzkoušejte, že dokážete zvýraznit řádek na libovolném indexu. - Nyní budeme chtít, aby komponenta
Lyrics
odscrollovala 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ě
App
změníte stav s aktulním indexm řádku, komponentaLyrics
odscrolluje na správný řádek a zvýrazní jej.