ν°μ€ν 리 λΈλ‘κ·Έμ κΈ μ½μ΄μ£Όλ μμ± ν©μ± κΈ°λ₯ μΆκ°νκΈ°
μΉμ¬μ΄νΈμμ ν μ€νΈλ₯Ό μμ±μΌλ‘ μ½μ΄μ£Όλ κΈ°λ₯μ μ¬μ©μ κ²½νμ ν¬κ² ν₯μμν¬ μ μμ΅λλ€. νΉν, μκ° μ₯μ κ° μλ μ¬μ©μμκ² λ§€μ° μ μ©νλ©°, λ©ν°νμ€νΉμ μνλ μ¬μ©μμκ²λ νΈλ¦¬ν©λλ€. HTML5μ SpeechSynthesis APIλ₯Ό μ¬μ©νλ©΄ κ°λ¨νκ² μμ± ν©μ± κΈ°λ₯μ μΉμ¬μ΄νΈμ μΆκ°ν μ μμ΅λλ€. μ΄λ² κΈμμλ ν°μ€ν 리 λΈλ‘κ·Έμ κΈ μ½μ΄μ£Όλ μμ± ν©μ± κΈ°λ₯μ μΆκ°νλ λ°©λ²μ μκ°ν©λλ€.
μΉμ¬μ΄νΈ ν
μ€νΈ μμ± ν©μ± κΈ°λ₯ ꡬν
ν°μ€ν 리 λΈλ‘κ·Έ μ μ© κ°μ΄λ
μΉμ¬μ΄νΈμμ ν μ€νΈλ₯Ό μμ±μΌλ‘ μ½μ΄μ£Όλ κΈ°λ₯μ μ¬μ©μ κ²½νμ ν¬κ² ν₯μμν¬ μ μμ΅λλ€. νΉν, μκ°μ μ₯μ κ° μλ μ¬μ©μμκ² λ§€μ° μ μ©νλ©°, λ©ν°νμ€νΉμ μνλ μ¬μ©μμκ²λ νΈλ¦¬ν©λλ€. HTML5μ SpeechSynthesis APIλ₯Ό μ¬μ©νλ©΄ κ°λ¨νκ² μμ± ν©μ± κΈ°λ₯μ μΉμ¬μ΄νΈμ μΆκ°ν μ μμ΅λλ€.
ν°μ€ν 리 λΈλ‘κ·Έ μμ± ν©μ± κΈ°λ₯ ꡬνμΌλ‘ μ κ·Όμ± ν₯μμν€λ λ²
"μ€νΌμ»€ λ²νΌμ ν΄λ¦νμ¬ μμ±μ μ½κΈ° μμνκ³ , λ€μ ν΄λ¦νλ©΄ μμ±μ λ©μΆλ" κΈ°λ₯μ ꡬννλ λ°©λ²μ μκ°νλ €κ³ ν©λλ€. μ΄ κΈ°λ₯μ νμ©νλ©΄ μ¬μ©μλ ν μ€νΈκ° μ½νλ λμ μμ±μ μ μ΄ν μ μμ΄ λμ± μ§κ΄μ μ΄κ³ μ μ©ν κ²½νμ μ 곡ν μ μμ΅λλ€.
SpeechSynthesis APIλ?
SpeechSynthesis APIλ μΉ λΈλΌμ°μ μμ ν μ€νΈλ₯Ό μμ±μΌλ‘ λ³νν μ μλ κΈ°λ₯μ μ 곡ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ¬μ©μλ ν μ€νΈ κΈ°λ°μ μ½ν μΈ λ₯Ό λ£λ κ²λ§μΌλ‘λ μ 보λ₯Ό μ»μ μ μμΌλ©°, μ΄λ νΉν μ κ·Όμ± μΈ‘λ©΄μμ μ€μν μν μ ν©λλ€.
μ£Όμ νΉμ§:
- λ€μν μΈμ΄μ μμ±μ μ§μν©λλ€.
- μ¬μ©μ μ€μ μ λ§κ² μμ± μλ, νΌμΉ, λ³Όλ₯¨μ μ‘°μ ν μ μμ΅λλ€.
- μμ± ν©μ± κΈ°λ₯μ μ½κ² μ μ΄ν μ μλ APIλ₯Ό μ 곡ν©λλ€.
κΈ μ½μ΄μ£Όλ κΈ°λ₯μ μ₯μ
μ κ·Όμ± ν₯μ (SEO κ΄μ μμ)
μΉμ¬μ΄νΈμμ ν μ€νΈλ₯Ό μμ±μΌλ‘ μ½μ΄μ£Όλ κΈ°λ₯μ μκ°μ₯μ κ° μλ μ¬μ©μμκ² μ€μν μ κ·Όμ± ν₯μμ μ 곡ν©λλ€. μ΄ κΈ°λ₯μ ν΅ν΄ μκ°μ₯μ μΈλ μ½ν μΈ λ₯Ό νΈλ¦¬νκ² μλΉν μ μμΌλ©°, κ²μ μμ§μμλ μ΄λ¬ν μ κ·Όμ±μ κ³ λ €νμ¬ μΉμ¬μ΄νΈ μμκ° μμΉν μ μμ΅λλ€. μ κ·Όμ±μ΄ ν₯μλ μΉμ¬μ΄νΈλ κ²μμμ§ μ΅μ ν(SEO)μλ κΈμ μ μΈ μν₯μ λ―ΈμΉ©λλ€.
μ΄μμμ νΈλ¦¬ν μ½ν μΈ μ κ²
μΉμ¬μ΄νΈ μ΄μμλ μμ± ν©μ± κΈ°λ₯μ ν΅ν΄ μμ μ΄ μμ±ν μ½ν μΈ λ₯Ό μμ±μΌλ‘ μ κ²ν μ μμ΅λλ€. μ½ν μΈ μ νλ¦μ΄λ μ΄ν¬, λ§μΆ€λ² λ±μ μ½κ² νμΈν μ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ ν μ€νΈμ κ°λ μ±μ λμ΄κ³ μ¬μ©μ κ²½νμ κ°μ ν μ μμ΅λλ€.
μ¬μ©μ νΈμμ± λ° μ²΄λ₯ μκ° ν₯μ
μ¬μ©μλ μμ± ν©μ± κΈ°λ₯μ ν΅ν΄ λ€λ₯Έ μμ μ νλ©΄μλ μ½ν μΈ λ₯Ό μ½κ² λ€μ μ μμ΅λλ€. μ΄λ‘ μΈν΄ κΈμ λκ° μ½λ κ²λ³΄λ€ λμ± ν¨μ¨μ μΌλ‘ μ 보μ μ κ·Όν μ μμΌλ©°, μΉμ¬μ΄νΈμ λν 체λ₯ μκ°μ΄ λμ΄λ μ μμ΅λλ€. μ΄λ μ¬μ©μ κ²½ν ν₯μλΏλ§ μλλΌ SEOμλ κΈμ μ μΈ μν₯μ λ―ΈμΉ©λλ€.
κ²μ μ΅μ ν(SEO) κ³ λ € μ¬ν
- ν€μλ μ¬μ©: κΈ μ λͺ©κ³Ό λ³Έλ¬Έμ ‘μμ± ν©μ±’, ‘μΉ μμ± ν©μ±’, ‘μ€νΌμ»€ λ²νΌ’, ‘SpeechSynthesis API’ λ± κ΄λ ¨ ν€μλλ₯Ό μμ°μ€λ½κ² λ°°μΉν©λλ€.
- λ©ν νκ·Έ μ΅μ ν: μΉ νμ΄μ§μ λ©ν νκ·Έμ κ΄λ ¨ ν€μλλ₯Ό λ£μ΄ κ²μ μμ§μμ μ μΈμλ μ μλλ‘ ν©λλ€.
- ν€λ νκ·Έ μ¬μ©: μ€μν μ λͺ©μλ νκ·Έλ₯Ό μ¬μ©ν΄ ꡬ쑰μ μΌλ‘ κΈμ μμ±ν©λλ€.
- λ΄λΆ λ§ν¬ νμ©: κ΄λ ¨λ λ€λ₯Έ λΈλ‘κ·Έ κΈμ΄λ νμ΄μ§λ‘μ λ΄λΆ λ§ν¬λ₯Ό μΆκ°νμ¬ μ¬μ΄νΈμ λ€λ₯Έ νμ΄μ§λ‘ μ μ μ μ λν©λλ€.
λ°λΌμ μ΄ κΈ°λ₯μ SEO, μ κ·Όμ± ν₯μ, μ¬μ©μ νΈμμ± λͺ¨λμμ μ€μν μ₯μ μ μ 곡ν©λλ€.
ν°μ€ν 리 λΈλ‘κ·Έμ κΈ μ½μ΄μ£Όλ μμ± ν©μ± κΈ°λ₯ μΆκ°νκΈ°
ν°μ€ν 리 λΈλ‘κ·Έμ μ μ©νλ λ°©λ²μ μ€λͺ νκ² μ΅λλ€. μ΄μ μ€μ λ‘ ν μ€νΈλ₯Ό μ½μ΄μ£Όλ μμ± ν©μ± κΈ°λ₯μ ꡬννλ λ°©λ²μ μ€λͺ νκ² μ΅λλ€. λ¨Όμ κΈ°λ³Έμ μΈ μμ± ν©μ± κΈ°λ₯μ λ§λ€μ΄λ³΄κ² μ΅λλ€.
let isSpeaking = false;
function speakText() {
const textElements = document.querySelectorAll('.tt_article_useless_p_margin');
const utterance = new SpeechSynthesisUtterance();
utterance.lang = 'ko-KR';
let isEndReached = false;
// ν
μ€νΈλ₯Ό νλλ‘ ν©μ³μ μ½μ
let textToRead = '';
textElements.forEach(element => {
textToRead += element.innerText.trim() + ' ';
});
// μμ±μ ν λ²λ§ μ½λλ‘ μ€μ
function speakNextText() {
if (isSpeaking) {
utterance.text = textToRead;
speechSynthesis.speak(utterance);
utterance.onend = function() {
isSpeaking = false;
};
}
}
if (!isSpeaking) {
isSpeaking = true;
speakNextText(); // ν
μ€νΈ μ½κΈ° μμ
}
}
// μλ‘ κ³ μΉ¨ μ μμ±μ λ©μΆλλ‘ μ€μ
window.onbeforeunload = function() {
if (isSpeaking) {
speechSynthesis.cancel();
isSpeaking = false;
}
};
// λ²νΌ ν΄λ¦ μ μμ± μ½κΈ°/μ€μ§
document.getElementById("speakerButton").addEventListener("click", function() {
if (isSpeaking) {
speechSynthesis.cancel(); // μμ±μ λ©μΆ€
isSpeaking = false;
} else {
speakText(); // μμ± μμ
}
});
μ½λ μ€λͺ
SpeechSynthesisUtterance: μμ±μ ν©μ±ν ν μ€νΈμ μμ±(μΈμ΄ λ±)μ μ€μ ν©λλ€.
- utterance.lang = 'ko-KR': μμ±μ νκ΅μ΄λ‘ μ€μ ν©λλ€. μ΄ λΆλΆμ μνλ μΈμ΄λ‘ λ³κ²½ν μ μμ΅λλ€.
- utterance.text = textToRead: ν μ€νΈλ₯Ό μμ±μΌλ‘ λ³νν ν μ€νΈλ‘ μ€μ ν©λλ€.
speechSynthesis.speak(): μ΄ λ©μλλ₯Ό νΈμΆνμ¬ μ€μ λ‘ μμ±μ ν©μ±νκ³ μμν©λλ€.
- speechSynthesis.cancel(): μμ±μ μ¦μ λ©μΆλ λ©μλμ λλ€. μμ± μ½κΈ°κ° μ§ν μ€μΌ λ μ΄ λ©μλλ₯Ό νΈμΆνλ©΄ μμ±μ΄ μ€μ§λ©λλ€.
- isSpeaking: μμ± ν©μ± κΈ°λ₯μ΄ μ€ν μ€μΈμ§λ₯Ό μΆμ νλ λ³μμ λλ€. λ²νΌ ν΄λ¦ μ μ΄ λ³μμ κ°μ λ°λΌ μμ±μ μμνκ±°λ μ€μ§ν©λλ€.
λ²νΌ μΆκ° λ° μμ± μ½κΈ° μμ/μ€μ§ κΈ°λ₯ ꡬν
μ¬μ©μκ° ν μ€νΈ μμ±μ μ½κ³ μ€μ§ν μ μλλ‘, μ€νΌμ»€ λ²νΌμ μΆκ°ν©λλ€. μ΄ λ²νΌμ ν΄λ¦νλ©΄ μμ±μ΄ μμλκ³ , λ€μ ν΄λ¦νλ©΄ μμ±μ λ©μΆλ κΈ°λ₯μ ꡬνν μ μμ΅λλ€.
<div class="speaker-container">
<!-- μ€νΌμ»€ λ²νΌ -->
<button id=speakerButton class="speaker-button">π</button>
<!-- μλ΄ ν
μ€νΈ -->
<span class="speaker-text">νΈλ¦¬νκ² κΈμ μ½μ΄ λ립λλ€.</span>
</div>
<p class="end">
μ€λͺ :
- <div class="speaker-container">: μ€νΌμ»€ λ²νΌκ³Ό μλ΄ ν μ€νΈλ₯Ό ν¬ν¨νλ 컨ν μ΄λμ λλ€.
- <button id="speakerButton" class="speaker-button">π</button>: μμ± ν©μ± κΈ°λ₯μ μμ/μ€μ§νλ μ€νΌμ»€ μμ΄μ½ λ²νΌμ λλ€.
- <span class="speaker-text">νΈλ¦¬νκ² κΈμ μ½μ΄ λ립λλ€.</span>: λ²νΌ μμ μλ΄ ν μ€νΈκ° μμΉν©λλ€.
- <p class="end">: νμ΄μ§μ λ§μ§λ§ λ¬Έλ¨μ λνλ΄λ©°, μμ± ν©μ±κ³Όλ κ΄κ³κ° μμ΅λλ€.
μ€νμΌ μ μ©νκΈ°
<style>
.speaker-button {
font-size: 40px; /* μ€νΌμ»€ μμ΄μ½ ν¬κΈ° */
padding: 10px 15px; /* λ²νΌμ λ΄λΆ μ¬λ°± */
border: none; /* λ²νΌμ ν
λ리 μ κ±° */
background-color: transparent; /* λ²νΌ λ°°κ²½ ν¬λͺ
*/
cursor: pointer; /* λ§μ°μ€λ₯Ό μ¬λ¦¬λ©΄ ν΄λ¦ κ°λ₯ν λλ */
}
.speaker-button:hover {
color: white; /* νΈλ² μ μμ΄μ½ μμ λ³κ²½ */
background-color: #007BFF; /* νΈλ² μ λ°°κ²½ μμ λ³κ²½ */
}
</style>
ν°μ€ν 리 λΈλ‘κ·Έμ μ μ©νκΈ°
ν°μ€ν 리 κ΄λ¦¬μ νμ΄μ§λ‘ μ΄λ:
- ν°μ€ν 리 λΈλ‘κ·Έμ λ‘κ·ΈμΈ ν κ΄λ¦¬μ νμ΄μ§λ‘ λ€μ΄κ°λλ€.
HTML/JS μ½λ μΆκ°:
- [κ΄λ¦¬ > HTML νΈμ§] λ©λ΄λ‘ μ΄λν©λλ€.
- </body> νκ·Έ μμ μμ μ€ν¬λ¦½νΈ μ½λμ λ²νΌ μ½λλ₯Ό μΆκ°ν©λλ€.
λ³Έλ¬Έμ μ μ©:
- ν°μ€ν 리 λΈλ‘κ·Έμ κΈμ μμ±ν λ, ν μ€νΈμ μμ± ν©μ± κΈ°λ₯μ μ μ©νκ³ μΆμ λΆλΆμ μμ±ν©λλ€.
- κΈμ .tt_article_useless_p_margin ν΄λμ€λ₯Ό κ°μ§ μμκ° ν μ€νΈλ‘ ν¬ν¨λλ©΄, ν΄λΉ ν μ€νΈκ° μμ±μΌλ‘ μ½νλλ€.
κΈμ μμ± λ²νΌ μ½μ :
- κΈμ <button id="speakerButton">π μμ± μ½κΈ° μμ/μ€μ§</button> λ²νΌμ μΆκ°νμ¬, μ¬μ©μλ€μ΄ μ½κ² μμ±μ μ μ΄ν μ μλλ‘ ν©λλ€.
ν°μ€ν 리 λΈλ‘κ·Έμ λ€μν λ³νλ‘ μ κ·Όμ±μ ν₯μν΄ λ³΄μΈμ
ν°μ€ν 리 λΈλ‘κ·Έμμ μ€νΌμ»€ λ²νΌμ μ΄μ©νμ¬ ν μ€νΈλ₯Ό μμ±μΌλ‘ μ½κ³ , μμ±μ μ μ΄ν μ μλ κΈ°λ₯μ λ§€μ° μ μ©ν©λλ€. μ΄ κΈ°λ₯μ ν΅ν΄ μ¬μ©μ κ²½νμ ν₯μμν¬ μ μμΌλ©°, μ κ·Όμ±μ κ³ λ €ν μΉμ¬μ΄νΈ κ°λ°μ ν λ° λ λμκ° μ μμ΅λλ€. λν, SpeechSynthesis APIλ₯Ό νμ©νλ©΄ μ½κ³ λΉ λ₯΄κ² μμ± ν©μ± κΈ°λ₯μ μΆκ°ν μ μμΌλ―λ‘, λ€μν μΉ νλ‘μ νΈμμ νμ©ν΄ 보μΈμ.
μμ± μ½κΈ° μμκ³Ό μ€μ§λ₯Ό μν λ²νΌμ ν΄λ¦νλ λμμ speechSynthesis.cancel()κ³Ό κ°μ API λ©μλλ₯Ό ν΅ν΄ κ°λ¨ν ꡬνν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λ λ§μ μ¬λλ€μ΄ μΉ μ½ν μΈ λ₯Ό μμ±μΌλ‘ μμ½κ² λ€μ μ μκ² λ©λλ€.