Otázka na Gemini: "Vieš mi vytvoriť zdrojový kód čítačky textu, ktorý by som umiestnil na stránky svojho webu s textom? Chcem zlepšiť podmienky použiteľnosti stránky pre zrakovo postihnutých." Odpoveď: "Samozrejme, Rasťo, môžeme vytvoriť zdrojový kód pre čítačku textu (Text-to-Speech, TTS), ktorú môžeš umiestniť na každú stránku. Toto riešenie využije Web Speech API, ktoré je dostupné vo väčšine moderných prehliadačov, a teda nevyžaduje externé knižnice ani platené služby. Nižšie nájdeš tri časti kódu: HTML pre tlačidlá a obalenie obsahu, JavaScript pre funkcionalitu a CSS pre základný vzhľad."
Nápad umiestniť čítačku textu do stránky zvýši prístupnosť a používateľský komfort. Mnoho ľudí ocení možnosť nechať si články prečítať hlasom digitálneho moderátora, najmä ak sú na cestách alebo majú zrakové postihnutie. Na realízaciu tejto funkcionality budete potrebovať tri základné zdrojové kódy: 1. HTML, 2. JavaScript, 3. CSS, ktoré si môžete stiahnuť nižšie:
1. HTML štruktúra
Túto časť HTML kódu vlož na začiatok alebo nad obsah každého článku, kde chceš mať tlačidlo čítačky. Extrémne dôležité je, aby celý text článku, ktorý chceš nechať prečítať, bol umiestnený vo vnútri div elementu s id="articleContent". Ak už máš hlavný kontajner pre článok s iným ID, jednoducho ho zmeň v JavaScriptovom kóde.
HTML<div class="text-to-speech-controls"> <button id="readArticleBtn" aria-label="Prečítať článok"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-play"> <polygon points="5 3 19 12 5 21 5 3"></polygon> </svg> Prečítať článok </button> <button id="stopReadingBtn" aria-label="Zastaviť čítanie" style="display: none;"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-square"> <rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect> </svg> Zastaviť čítanie </button> </div> <div id="articleContent"> <!-- Sem pôjde obsah článku, ktorý bude čítaný --> </div>
2. JavaScript funkcionalita
Tento JavaScript kód umiestniš ideálne na koniec <body> tagu, tesne pred </body>, alebo do externého .js súboru, ktorý sa pripojí ku všetkým stránkam.
JavaScript<script>document.addEventListener('DOMContentLoaded', () => { // Zabezpečí, že skript sa spustí až po načítaní DOM const readBtn = document.getElementById('readArticleBtn'); const stopBtn = document.getElementById('stopReadingBtn'); const articleContent = document.getElementById('articleContent'); // Kontajner s textom článku let utterance = null; // Premenná na uloženie rečového objektu let voices = []; // Pre uloženie dostupných hlasov // Funkcia na získanie dostupných hlasov function populateVoiceList() { voices = speechSynthesis.getVoices().sort((a, b) => { const aname = a.name.toUpperCase(); const bname = b.name.toUpperCase(); if (aname < bname) return -1; if (aname > bname) return 1; return 0; }); // Voliteľné: Ak chceš vybrať špecifický slovenský hlas, môžeš ho tu nájsť // const slovakVoice = voices.find(voice => voice.lang === 'sk-SK' && voice.name.includes('Slovak')); // if (slovakVoice) { // // Pridelíme ho neskôr k utterance // } } // Načítaj hlasy hneď po načítaní stránky populateVoiceList(); if (speechSynthesis.onvoiceschanged !== undefined) { speechSynthesis.onvoiceschanged = populateVoiceList; // Aktualizuj zoznam hlasov, ak sa zmení } if ('speechSynthesis' in window) { // Skontroluj, či prehliadač podporuje Text-to-Speech API readBtn.addEventListener('click', () => { if (speechSynthesis.speaking) { speechSynthesis.cancel(); // Zastav predchádzajúce čítanie } const textToRead = articleContent.textContent; // Získa text z #articleContent utterance = new SpeechSynthesisUtterance(textToRead); // Nastavenie jazyka utterance.lang = 'sk-SK'; // Voliteľné: Ak chceš použiť konkrétny nájdený slovenský hlas // const slovakVoice = voices.find(voice => voice.lang === 'sk-SK' && voice.name.includes('Slovak')); // if (slovakVoice) { // utterance.voice = slovakVoice; // } else { // console.warn("Slovenský hlas nebol nájdený, použije sa predvolený."); // } // Event listener pre ukončenie čítania utterance.onend = () => { readBtn.style.display = 'inline-flex'; // Používaj 'inline-flex' ak máš ikonu stopBtn.style.display = 'none'; }; // Event listener pre chybu čítania utterance.onerror = (event) => { console.error('SpeechSynthesisUtterance.onerror', event); readBtn.style.display = 'inline-flex'; stopBtn.style.display = 'none'; alert('Chyba pri čítaní textu. Váš prehliadač nepodporuje túto funkciu alebo má problém s hlasom.'); }; speechSynthesis.speak(utterance); readBtn.style.display = 'none'; stopBtn.style.display = 'inline-flex'; }); stopBtn.addEventListener('click', () => { if (speechSynthesis.speaking) { speechSynthesis.cancel(); // Zastaví čítanie } readBtn.style.display = 'inline-flex'; stopBtn.style.display = 'none'; }); } else { // Ak prehliadač nepodporuje API, skry tlačidlá alebo zobraz správu if (readBtn) readBtn.style.display = 'none'; if (stopBtn) stopBtn.style.display = 'none'; console.warn("Váš prehliadač nepodporuje funkciu prevodu textu na reč (Web Speech API)."); } }); </script>
3. CSS pre vzhľad tlačidiel
Nasledujúci CSS kód vlož do svojho hlavného .css súboru.
CSS<style>.text-to-speech-controls { margin-bottom: 20px; display: flex; /* Pre lepšie usporiadanie tlačidiel */ gap: 10px; /* Priestor medzi tlačidlami */ } .text-to-speech-controls button { background-color: #4CAF50; /* Zelená farba */ color: white; padding: 10px 15px; border: none; border-radius: 5px; cursor: pointer; font-size: 1em; display: flex; /* Pre usporiadanie ikony a textu */ align-items: center; gap: 5px; /* Priestor medzi ikonou a textom */ transition: background-color 0.3s ease; /* Plynulý prechod farby */ } .text-to-speech-controls button svg { width: 20px; /* Veľkosť ikony */ height: 20px; } #stopReadingBtn { background-color: #f44336; /* Červená farba */ } .text-to-speech-controls button:hover { opacity: 0.9; background-color: #388E3C; /* Tmavo zelená pri hover */ } #stopReadingBtn:hover { background-color: #D32F2F; /* Tmavo červená pri hover */ } /* Štýl pre kontajner s textom, ak by si ho chcel napríklad orámovať */ #articleContent { /* padding: 15px; */ /* border: 1px solid #eee; */ /* border-radius: 8px; */ /* background-color: #f9f9f9; */ } </style>
1. Umiestnenie <div id="articleContent">: Toto je najdôležitejší krok. Uistite sa, že všetok text, ktorý chcete nechať prečítať (celý obsah článku), je obalený do <div id="articleContent">...</div>. Ak už máte hlavný kontajner s článkom, ktorý má iné ID (napr. <article id="mainArticle">), potom v Javascripte zmeň riadok:
JavaScriptconst articleContent = document.getElementById('articleContent'); // na const articleContent = document.getElementById('mainArticle'); // alebo akékoľvek ID, ktoré používaš
2. Ikony (SVG): Použil som jednoduché SVG ikony pre tlačidlá "Prečítať" a "Zastaviť", aby to vyzeralo profesionálnejšie. Sú to inline SVG, takže nepotrebuješ žiadne externé knižnice ikon.
3. Jazyk (utterance.lang = 'sk-SK';): Nastavenie jazyka je dôležité pre správnu výslovnosť. Prehliadač sa pokúsi nájsť slovenský hlas. Ak nie je dostupný, použije predvolený hlas, čo môže viesť k anglickému prízvuku. Kvalita hlasov sa líši medzi prehliadačmi a operačnými systémami.
4. DOMContentLoaded: JavaScript kód je obalený do document.addEventListener('DOMContentLoaded', ...);. To zabezpečí, že skript sa pokúsi nájsť tlačidlá a obsah až potom, čo je HTML dokument plne načítaný a štruktúra je pripravená.
5. Testovanie: Po implementácii kód dôkladne otestuj vo viacerých prehliadačoch (Chrome, Firefox, Edge, Safari) a na rôznych zariadeniach (desktop, mobil), aby si sa uistil, že funguje podľa očakávania.
Na VeternéParky.sk sme implementovali funkciu čítačky textu, ktorá vám umožňuje nechať si naše články prečítať namiesto čítania. Táto funkcia zvyšuje prístupnosť a pohodlie pre našich čitateľov. Pozrime sa, ako je táto funkcia technicky realizovaná pomocou HTML, CSS a JavaScriptu.
HTML (HyperText Markup Language) tvorí kostru našej webovej stránky a definuje obsah a štruktúru. Pre funkciu čítačky textu sme použili nasledujúce kľúčové HTML elementy:
CSS (Cascading Style Sheets) definuje, ako naše HTML elementy vyzerajú. Použili sme ho na základné naformátovanie tlačidiel čítačky, aby boli vizuálne príjemné a funkčné.
ďalšie vlastnosti zistíte priamo v popise pri konkrétnych štýloch.
JavaScript dodáva našim HTML elementom funkčnosť a umožňuje im interagovať s používateľom. Používame tu vstavané Web Speech API, ktoré je súčasťou moderných prehliadačov.
Vďaka tejto kombinácii HTML, CSS a JavaScriptu môžete na svojich stránkach ľahko a efektívne ponúknuť funkciu čítačky textu, čím zlepšíte používateľskú skúsenosť a sprístupníte obsah širšiemu publiku.
Tento kód by mal poskytnúť robustnú a používateľsky prívetivú čítačku textu pre tvoje články. Ak máš nejaké otázky k implementácii alebo potrebuješ ďalšie úpravy, pokojne sa spýtaj!