About
Explore
Events & Classes
Support Us
Join
Sign In
purple_ghost
View Project Page
Run
Fullscreen
JS Speaks to us!
HTML
CSS
JS
<!-- Created by purple_ghost, subject to copyright. Doesn't work in other languages. --> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> </head> <body> <textarea id="text"></textarea> <label for="speed">Speed</label> <input type="number" name="spee" id="speed" min=".5" max="3" step=".5" value="1"> <button id="play-button">Play</button> <button id="pause-button">Pause</button> <button id="stop-button">Stop</button> </body> </html>
*:focus { outline: none; } body { width: 90%; margin: 0 auto; margin-top: 1rem; } #text { width: 100%; color: purple; height: 50vh; border: 1px solid green; }
const playButton = document.getElementById('play-button') const pauseButton = document.getElementById('pause-button') const stopButton = document.getElementById('stop-button') const textInput = document.getElementById('text') const speedInput = document.getElementById('speed') let currentCharacter playButton.addEventListener('click', () => { playText(textInput.value) }) pauseButton.addEventListener('click', pauseText) stopButton.addEventListener('click', stopText) speedInput.addEventListener('input', () => { stopText() playText(utterance.text.substring(currentCharacter)) }) const utterance = new SpeechSynthesisUtterance() utterance.addEventListener('end', () => { textInput.disabled = false }) utterance.addEventListener('boundary', e => { currentCharacter = e.charIndex }) function playText(text) { if (speechSynthesis.paused && speechSynthesis.speaking) { return speechSynthesis.resume() } if (speechSynthesis.speaking) return utterance.text = text utterance.rate = speedInput.value || 1 textInput.disabled = true speechSynthesis.speak(utterance) } function pauseText() { if (speechSynthesis.speaking) speechSynthesis.pause() } function stopText() { speechSynthesis.resume() speechSynthesis.cancel() }