add pronunciation section with speech synthesis

This commit is contained in:
Dauren777 2026-06-19 06:22:25 +00:00
parent e1d76922a7
commit 8a52f181cb
9 changed files with 480 additions and 0 deletions

View File

@ -16,6 +16,7 @@
<li><a href="index.html">Home</a></li>
<li><a href="vocabulary.html">Vocabulary</a></li>
<li><a href="grammar.html">Grammar</a></li>
<li><a href="pronunciation.html">Pronunciation</a></li>
<li><a href="exercises.html">Exercises</a></li>
<li><a href="tests.html">Tests</a></li>
<li><a href="reading.html">Reading</a></li>

View File

@ -16,6 +16,7 @@
<li><a href="index.html">Home</a></li>
<li><a href="vocabulary.html">Vocabulary</a></li>
<li><a href="grammar.html">Grammar</a></li>
<li><a href="pronunciation.html">Pronunciation</a></li>
<li><a href="exercises.html">Exercises</a></li>
<li><a href="tests.html">Tests</a></li>
<li><a href="reading.html">Reading</a></li>

View File

@ -16,6 +16,7 @@
<li><a href="index.html">Home</a></li>
<li><a href="vocabulary.html">Vocabulary</a></li>
<li><a href="grammar.html">Grammar</a></li>
<li><a href="pronunciation.html">Pronunciation</a></li>
<li><a href="exercises.html">Exercises</a></li>
<li><a href="tests.html">Tests</a></li>
<li><a href="reading.html">Reading</a></li>

View File

@ -16,6 +16,7 @@
<li><a href="index.html">Home</a></li>
<li><a href="vocabulary.html">Vocabulary</a></li>
<li><a href="grammar.html">Grammar</a></li>
<li><a href="pronunciation.html">Pronunciation</a></li>
<li><a href="exercises.html">Exercises</a></li>
<li><a href="tests.html">Tests</a></li>
<li><a href="reading.html">Reading</a></li>
@ -72,6 +73,12 @@
<p>Read short and simple texts in English. Each text has questions to check your understanding.</p>
<a href="reading.html" class="btn btn-primary">Start Reading</a>
</div>
<div class="card">
<div class="card-icon">🗣️</div>
<h3>Pronunciation</h3>
<p>Listen to words and phrases spoken aloud. Practice your pronunciation and improve your speaking skills.</p>
<a href="pronunciation.html" class="btn btn-primary">Start Speaking</a>
</div>
</div>
</div>
</section>

View File

@ -166,6 +166,60 @@ function submitForm(event) {
}, 5000);
}
// --- Pronunciation ---
function speakWord(word, rate) {
if (!window.speechSynthesis) {
alert('Speech synthesis is not supported in your browser.');
return;
}
window.speechSynthesis.cancel();
var utterance = new SpeechSynthesisUtterance(word);
utterance.lang = 'en-US';
utterance.rate = rate || 0.9;
utterance.pitch = 1;
window.speechSynthesis.speak(utterance);
}
function repeatWord(btn) {
var word = btn.getAttribute('data-word');
speakWord(word, 0.8);
btn.textContent = '🔊 Playing...';
setTimeout(function() { btn.textContent = '🔊 Listen'; }, 1500);
}
function speakSlow(btn) {
var word = btn.getAttribute('data-word');
speakWord(word, 0.4);
btn.textContent = '🐢 Slow...';
setTimeout(function() { btn.innerHTML = '🐢 Slow'; }, 2000);
}
function checkDictation(input) {
var exercise = input.closest('.exercise');
var answer = input.getAttribute('data-answer');
var feedback = exercise.querySelector('.feedback');
input.classList.remove('correct', 'wrong');
if (input.value.trim().toLowerCase() === answer.toLowerCase()) {
input.classList.add('correct');
feedback.textContent = 'Correct! Great listening!';
feedback.className = 'feedback correct';
} else {
input.classList.add('wrong');
feedback.textContent = 'Not quite. The correct word is: ' + answer;
feedback.className = 'feedback wrong';
}
feedback.style.display = 'block';
}
function speakPhrase(btn) {
var phrase = btn.getAttribute('data-phrase');
speakWord(phrase, 0.8);
btn.textContent = '🔊 Playing...';
setTimeout(function() { btn.innerHTML = '🔊 Hear Phrase'; }, 1500);
}
// --- Vocabulary filter ---
function filterVocab(category, btn) {
const rows = document.querySelectorAll('.vocab-row');

413
pronunciation.html Normal file
View File

@ -0,0 +1,413 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Pronunciation — English Easy</title>
<link rel="stylesheet" href="css/style.css">
<style>
.pron-card {
background: var(--white);
border: 1px solid var(--gray-100);
border-radius: 20px;
padding: 24px 28px;
margin-bottom: 16px;
box-shadow: var(--shadow);
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 16px;
transition: all 0.3s;
}
.pron-card:hover {
box-shadow: var(--shadow-hover);
}
.pron-word {
display: flex;
align-items: center;
gap: 16px;
flex-wrap: wrap;
}
.pron-word .word {
font-size: 24px;
font-weight: 800;
color: var(--accent);
}
.pron-word .transcription {
font-family: 'SF Mono', 'Fira Code', monospace;
font-size: 16px;
color: var(--gray-500);
background: var(--gray-100);
padding: 4px 12px;
border-radius: 8px;
}
.pron-word .translation {
font-size: 15px;
color: var(--gray-500);
}
.pron-actions {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.pron-actions .btn {
font-size: 13px;
padding: 8px 16px;
border-radius: 10px;
}
.btn-listen {
background: var(--green);
color: var(--white);
box-shadow: 0 3px 10px rgba(0,184,148,0.2);
}
.btn-listen:hover {
box-shadow: 0 6px 20px rgba(0,184,148,0.3);
}
.btn-slow {
background: var(--accent-50);
color: var(--accent);
box-shadow: none;
border: 2px solid var(--accent-light);
}
.btn-slow:hover {
background: var(--accent);
color: var(--white);
}
.tip-box {
background: var(--warm-light);
border-left: 4px solid #fdcb6e;
padding: 16px 20px;
border-radius: 12px;
margin-bottom: 24px;
font-size: 15px;
color: var(--ink);
}
.tip-box strong {
color: #e17055;
}
.phonetics-intro {
max-width: 700px;
margin: 0 auto 32px;
text-align: center;
color: var(--gray-500);
}
@media (max-width: 600px) {
.pron-card {
flex-direction: column;
align-items: flex-start;
}
.pron-word .word {
font-size: 20px;
}
}
</style>
</head>
<body>
<header>
<div class="header-inner">
<a href="index.html" class="logo"><span class="logo-icon">E</span>English <span>Easy</span></a>
<button class="menu-toggle" aria-label="Menu"></button>
<nav>
<ul class="nav-list">
<li><a href="index.html">Home</a></li>
<li><a href="vocabulary.html">Vocabulary</a></li>
<li><a href="grammar.html">Grammar</a></li>
<li><a href="pronunciation.html">Pronunciation</a></li>
<li><a href="exercises.html">Exercises</a></li>
<li><a href="tests.html">Tests</a></li>
<li><a href="reading.html">Reading</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</nav>
</div>
</header>
<section class="page-header">
<div class="container">
<h1>Pronunciation</h1>
<p>Listen, repeat, and improve your English pronunciation.</p>
</div>
</section>
<section class="section">
<div class="container">
<div class="tip-box">
<strong>💡 Tip:</strong> Click <strong>Listen</strong> to hear the word, then repeat it out loud. Use <strong>Slow</strong> to hear it spoken slowly. Practice every day!
</div>
<div class="phonetics-intro">
<p>Click on any word to hear how it's pronounced. Repeat after the speaker. The transcription shows you how to read the sounds.</p>
</div>
<!-- Common Words -->
<h2 class="section-title" style="font-size:28px;margin-bottom:24px;">Common <span>Words</span></h2>
<div class="pron-card">
<div class="pron-word">
<span class="word">Hello</span>
<span class="transcription">/həˈloʊ/</span>
<span class="translation">Привет</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-word="Hello" onclick="repeatWord(this)">🔊 Listen</button>
<button class="btn btn-slow" data-word="Hello" onclick="speakSlow(this)">🐢 Slow</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">Goodbye</span>
<span class="transcription">/ɡʊdˈbaɪ/</span>
<span class="translation">До свидания</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-word="Goodbye" onclick="repeatWord(this)">🔊 Listen</button>
<button class="btn btn-slow" data-word="Goodbye" onclick="speakSlow(this)">🐢 Slow</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">Thank you</span>
<span class="transcription">/θæŋk juː/</span>
<span class="translation">Спасибо</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-word="Thank you" onclick="repeatWord(this)">🔊 Listen</button>
<button class="btn btn-slow" data-word="Thank you" onclick="speakSlow(this)">🐢 Slow</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">Please</span>
<span class="transcription">/pliːz/</span>
<span class="translation">Пожалуйста</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-word="Please" onclick="repeatWord(this)">🔊 Listen</button>
<button class="btn btn-slow" data-word="Please" onclick="speakSlow(this)">🐢 Slow</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">Sorry</span>
<span class="transcription">/ˈsɒri/</span>
<span class="translation">Извините</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-word="Sorry" onclick="repeatWord(this)">🔊 Listen</button>
<button class="btn btn-slow" data-word="Sorry" onclick="speakSlow(this)">🐢 Slow</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">Water</span>
<span class="transcription">/ˈːtər/</span>
<span class="translation">Вода</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-word="Water" onclick="repeatWord(this)">🔊 Listen</button>
<button class="btn btn-slow" data-word="Water" onclick="speakSlow(this)">🐢 Slow</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">Beautiful</span>
<span class="transcription">/ˈbjuːtɪfəl/</span>
<span class="translation">Красивый</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-word="Beautiful" onclick="repeatWord(this)">🔊 Listen</button>
<button class="btn btn-slow" data-word="Beautiful" onclick="speakSlow(this)">🐢 Slow</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">Important</span>
<span class="transcription">/ɪmˈːrtənt/</span>
<span class="translation">Важный</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-word="Important" onclick="repeatWord(this)">🔊 Listen</button>
<button class="btn btn-slow" data-word="Important" onclick="speakSlow(this)">🐢 Slow</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">Different</span>
<span class="transcription">/ˈdɪfərənt/</span>
<span class="translation">Разный</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-word="Different" onclick="repeatWord(this)">🔊 Listen</button>
<button class="btn btn-slow" data-word="Different" onclick="speakSlow(this)">🐢 Slow</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">Family</span>
<span class="transcription">/ˈfæməli/</span>
<span class="translation">Семья</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-word="Family" onclick="repeatWord(this)">🔊 Listen</button>
<button class="btn btn-slow" data-word="Family" onclick="speakSlow(this)">🐢 Slow</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">Weather</span>
<span class="transcription">/ˈweðər/</span>
<span class="translation">Погода</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-word="Weather" onclick="repeatWord(this)">🔊 Listen</button>
<button class="btn btn-slow" data-word="Weather" onclick="speakSlow(this)">🐢 Slow</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">Morning</span>
<span class="transcription">/ˈːrnɪŋ/</span>
<span class="translation">Утро</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-word="Morning" onclick="repeatWord(this)">🔊 Listen</button>
<button class="btn btn-slow" data-word="Morning" onclick="speakSlow(this)">🐢 Slow</button>
</div>
</div>
<!-- Phrases -->
<h2 class="section-title" style="font-size:28px;margin-bottom:24px;margin-top:48px;">Common <span>Phrases</span></h2>
<div class="pron-card">
<div class="pron-word">
<span class="word">How are you?</span>
<span class="translation">Как дела?</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-phrase="How are you?" onclick="speakPhrase(this)">🔊 Hear Phrase</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">I am fine, thank you.</span>
<span class="translation">Я в порядке, спасибо.</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-phrase="I am fine, thank you." onclick="speakPhrase(this)">🔊 Hear Phrase</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">Nice to meet you.</span>
<span class="translation">Приятно познакомиться.</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-phrase="Nice to meet you." onclick="speakPhrase(this)">🔊 Hear Phrase</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">What is your name?</span>
<span class="translation">Как тебя зовут?</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-phrase="What is your name?" onclick="speakPhrase(this)">🔊 Hear Phrase</button>
</div>
</div>
<div class="pron-card">
<div class="pron-word">
<span class="word">Where are you from?</span>
<span class="translation">Откуда ты?</span>
</div>
<div class="pron-actions">
<button class="btn btn-listen" data-phrase="Where are you from?" onclick="speakPhrase(this)">🔊 Hear Phrase</button>
</div>
</div>
<!-- Pronunciation Tips -->
<h2 class="section-title" style="font-size:28px;margin-bottom:24px;margin-top:48px;">Pronunciation <span>Tips</span></h2>
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:20px;">
<div class="grammar-card">
<h3>👄 The "th" Sound</h3>
<p>Put your tongue between your teeth and blow air.</p>
<div class="formula">Think /θɪŋk/ — Thank you /θæŋk juː/</div>
</div>
<div class="grammar-card">
<h3>🗣️ The "r" Sound</h3>
<p>In English, the tongue does not touch the top of the mouth.</p>
<div class="formula">Red /red/ — Right /raɪt/</div>
</div>
<div class="grammar-card">
<h3>🎵 Word Stress</h3>
<p>English words have one stressed syllable. Say it louder and longer.</p>
<div class="formula">im<strong>POR</strong>tant — <strong>BEAU</strong>tiful</div>
</div>
</div>
<!-- Dictation -->
<h2 class="section-title" style="font-size:28px;margin-bottom:24px;margin-top:48px;">Dictation <span>Practice</span></h2>
<p class="section-subtitle">Listen to the word, then type what you hear.</p>
<div class="exercise">
<h3>Listen and type the word</h3>
<p class="question">🔊 Click the button to hear a word, then type it:</p>
<div style="display:flex;gap:12px;flex-wrap:wrap;margin-bottom:14px;">
<button class="btn btn-listen" data-word="Hello" onclick="repeatWord(this)">🔊 Hear Word</button>
<input type="text" class="fill-input" data-answer="hello" placeholder="Type the word..." style="width:180px;">
<button class="btn" onclick="checkDictation(this.previousElementSibling)">Check</button>
</div>
<div class="feedback"></div>
</div>
<div class="exercise">
<h3>Listen and type the word</h3>
<p class="question">🔊 Click the button to hear a word, then type it:</p>
<div style="display:flex;gap:12px;flex-wrap:wrap;margin-bottom:14px;">
<button class="btn btn-listen" data-word="Friend" onclick="repeatWord(this)">🔊 Hear Word</button>
<input type="text" class="fill-input" data-answer="friend" placeholder="Type the word..." style="width:180px;">
<button class="btn" onclick="checkDictation(this.previousElementSibling)">Check</button>
</div>
<div class="feedback"></div>
</div>
<div class="exercise">
<h3>Listen and type the word</h3>
<p class="question">🔊 Click the button to hear a word, then type it:</p>
<div style="display:flex;gap:12px;flex-wrap:wrap;margin-bottom:14px;">
<button class="btn btn-listen" data-word="Teacher" onclick="repeatWord(this)">🔊 Hear Word</button>
<input type="text" class="fill-input" data-answer="teacher" placeholder="Type the word..." style="width:180px;">
<button class="btn" onclick="checkDictation(this.previousElementSibling)">Check</button>
</div>
<div class="feedback"></div>
</div>
</div>
</section>
<footer>
<div class="container">
<p>&copy; 2026 <a href="index.html">English Easy</a>. Made for learning English.</p>
</div>
</footer>
<script src="js/script.js"></script>
</body>
</html>

View File

@ -16,6 +16,7 @@
<li><a href="index.html">Home</a></li>
<li><a href="vocabulary.html">Vocabulary</a></li>
<li><a href="grammar.html">Grammar</a></li>
<li><a href="pronunciation.html">Pronunciation</a></li>
<li><a href="exercises.html">Exercises</a></li>
<li><a href="tests.html">Tests</a></li>
<li><a href="reading.html">Reading</a></li>

View File

@ -16,6 +16,7 @@
<li><a href="index.html">Home</a></li>
<li><a href="vocabulary.html">Vocabulary</a></li>
<li><a href="grammar.html">Grammar</a></li>
<li><a href="pronunciation.html">Pronunciation</a></li>
<li><a href="exercises.html">Exercises</a></li>
<li><a href="tests.html">Tests</a></li>
<li><a href="reading.html">Reading</a></li>

View File

@ -16,6 +16,7 @@
<li><a href="index.html">Home</a></li>
<li><a href="vocabulary.html">Vocabulary</a></li>
<li><a href="grammar.html">Grammar</a></li>
<li><a href="pronunciation.html">Pronunciation</a></li>
<li><a href="exercises.html">Exercises</a></li>
<li><a href="tests.html">Tests</a></li>
<li><a href="reading.html">Reading</a></li>