jianzhihuixiang/alacarte-novel-website/chapters/chapter-39.html
2026-03-29 13:57:51 +08:00

898 lines
38 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<title>暗黑城入口·无头骑士 - 阿拉德:剑之回响</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-primary: linear-gradient(135deg, #0f0c29 0%, #302b63 50%, #24243e 100%);
--text-primary: #e0e0e0;
--text-secondary: #888;
--accent-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
--border-color: rgba(255,255,255,0.1);
--btn-bg: rgba(255,255,255,0.1);
--btn-hover: rgba(255,255,255,0.2);
}
[data-theme="light"] {
--bg-primary: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
--text-primary: #333;
--text-secondary: #666;
--border-color: rgba(0,0,0,0.1);
--btn-bg: rgba(0,0,0,0.05);
--btn-hover: rgba(0,0,0,0.1);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Noto Serif SC', serif;
background: var(--bg-primary);
color: var(--text-primary);
line-height: 1.8;
min-height: 100vh;
transition: all 0.3s ease;
}
.container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
padding-bottom: 120px;
}
/* 顶部导航 */
.top-nav {
position: fixed;
top: 0;
left: 0;
right: 0;
background: rgba(0,0,0,0.3);
backdrop-filter: blur(10px);
border-bottom: 1px solid var(--border-color);
z-index: 1000;
padding: 10px 20px;
}
.top-nav-content {
max-width: 800px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
}
.nav-link {
color: var(--text-primary);
text-decoration: none;
font-family: 'Noto Sans SC', sans-serif;
font-size: 14px;
padding: 8px 16px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
border-radius: 8px;
transition: all 0.3s ease;
}
.nav-link:hover {
background: var(--btn-hover);
}
.chapter-header {
text-align: center;
padding: 80px 0 40px;
border-bottom: 1px solid var(--border-color);
margin-bottom: 40px;
}
.chapter-number {
font-size: 14px;
color: var(--text-secondary);
letter-spacing: 4px;
text-transform: uppercase;
margin-bottom: 10px;
}
.chapter-title {
font-size: 32px;
font-weight: 700;
background: var(--accent-gradient);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 20px;
}
.chapter-meta {
font-size: 14px;
color: var(--text-secondary);
}
.chapter-content {
font-size: 18px;
line-height: 2;
text-align: justify;
}
.chapter-content p {
margin-bottom: 1.5em;
text-indent: 2em;
}
.chapter-content p:first-of-type::first-letter {
font-size: 3em;
float: left;
line-height: 1;
margin-right: 8px;
margin-top: -5px;
background: var(--accent-gradient);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
font-weight: 700;
}
/* 固定底部导航 */
.fixed-nav {
position: fixed;
bottom: 0;
left: 0;
right: 0;
background: rgba(0,0,0,0.3);
backdrop-filter: blur(10px);
border-top: 1px solid var(--border-color);
z-index: 1000;
padding: 15px 20px;
}
.fixed-nav-content {
max-width: 800px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
}
.nav-btn {
padding: 12px 24px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
border-radius: 8px;
color: var(--text-primary);
text-decoration: none;
transition: all 0.3s ease;
font-family: 'Noto Sans SC', sans-serif;
font-size: 14px;
cursor: pointer;
}
.nav-btn:hover {
background: var(--btn-hover);
transform: translateY(-2px);
}
.nav-btn.disabled {
opacity: 0.3;
cursor: not-allowed;
pointer-events: none;
}
/* 右侧滚动按钮 */
.scroll-buttons {
position: fixed;
right: 20px;
bottom: 90px;
display: flex;
flex-direction: column;
gap: 10px;
z-index: 1001;
}
.scroll-btn {
width: 40px;
height: 40px;
border-radius: 8px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
color: var(--text-primary);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
transition: all 0.3s ease;
font-family: 'Noto Sans SC', sans-serif;
}
.scroll-btn:hover {
background: var(--btn-hover);
}
/* TTS控制面板 */
.tts-panel {
position: fixed;
left: 20px;
bottom: 90px;
display: flex;
flex-direction: column;
gap: 10px;
z-index: 1001;
background: rgba(0,0,0,0.5);
backdrop-filter: blur(10px);
border-radius: 12px;
border: 1px solid var(--border-color);
padding: 15px;
min-width: 180px;
}
.tts-title {
font-size: 12px;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 2px;
margin-bottom: 5px;
}
.tts-controls {
display: flex;
gap: 8px;
margin-bottom: 10px;
}
.tts-btn {
width: 36px;
height: 36px;
border-radius: 8px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
color: var(--text-primary);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
transition: all 0.3s ease;
font-family: 'Noto Sans SC', sans-serif;
}
.tts-btn:hover {
background: var(--btn-hover);
}
.tts-btn.active {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-color: #667eea;
}
.tts-progress {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 10px;
}
.tts-progress-bar {
flex: 1;
height: 4px;
background: var(--btn-bg);
border-radius: 2px;
overflow: hidden;
}
.tts-progress-fill {
height: 100%;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
width: 0%;
transition: width 0.1s ease;
}
.tts-time {
font-size: 12px;
color: var(--text-secondary);
font-family: 'Noto Sans SC', sans-serif;
min-width: 80px;
}
.tts-speed {
display: flex;
align-items: center;
gap: 8px;
}
.tts-speed-label {
font-size: 12px;
color: var(--text-secondary);
font-family: 'Noto Sans SC', sans-serif;
}
.tts-speed-select {
padding: 4px 8px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
border-radius: 4px;
color: var(--text-primary);
font-size: 12px;
cursor: pointer;
font-family: 'Noto Sans SC', sans-serif;
}
@media (max-width: 600px) {
.tts-panel {
left: 10px;
bottom: 80px;
min-width: 150px;
padding: 10px;
}
.tts-btn {
width: 32px;
height: 32px;
font-size: 12px;
}
}
/* 侧边栏 - 标题固定,内容滚动 */
.sidebar {
position: fixed;
right: 20px;
top: 50%;
transform: translateY(-50%);
background: rgba(0,0,0,0.5);
backdrop-filter: blur(10px);
border-radius: 12px;
border: 1px solid var(--border-color);
width: 200px;
max-height: 70vh;
z-index: 999;
display: flex;
flex-direction: column;
}
.sidebar-title {
font-size: 14px;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 2px;
padding: 15px 20px;
border-bottom: 1px solid var(--border-color);
flex-shrink: 0;
}
.sidebar-content {
overflow-y: auto;
padding: 10px 20px 20px;
flex: 1;
scrollbar-width: thin;
scrollbar-color: transparent transparent;
transition: scrollbar-color 0.3s ease;
}
.sidebar-content:hover {
scrollbar-color: rgba(255,255,255,0.3) transparent;
}
.sidebar-content::-webkit-scrollbar {
width: 6px;
}
.sidebar-content::-webkit-scrollbar-track {
background: transparent;
}
.sidebar-content::-webkit-scrollbar-thumb {
background: transparent;
border-radius: 3px;
transition: background 0.3s ease;
}
.sidebar-content:hover::-webkit-scrollbar-thumb {
background: rgba(255,255,255,0.3);
}
.sidebar-content:hover::-webkit-scrollbar-thumb:hover {
background: rgba(255,255,255,0.5);
}
[data-theme="light"] .sidebar-content:hover {
scrollbar-color: rgba(0,0,0,0.3) transparent;
}
[data-theme="light"] .sidebar-content:hover::-webkit-scrollbar-thumb {
background: rgba(0,0,0,0.3);
}
[data-theme="light"] .sidebar-content:hover::-webkit-scrollbar-thumb:hover {
background: rgba(0,0,0,0.5);
}
.sidebar-chapter {
display: block;
padding: 8px 0;
color: #aaa;
text-decoration: none;
font-size: 13px;
border-bottom: 1px solid rgba(255,255,255,0.05);
transition: all 0.3s ease;
line-height: 1.5;
}
.sidebar-chapter:hover {
color: #667eea;
}
.sidebar-chapter.current {
color: #667eea;
font-weight: 600;
}
@media (max-width: 1200px) {
.sidebar {
display: none;
}
}
@media (max-width: 600px) {
.chapter-title {
font-size: 24px;
}
.chapter-content {
font-size: 16px;
}
.fixed-nav-content {
gap: 10px;
}
.nav-btn {
padding: 10px 15px;
font-size: 12px;
}
.scroll-buttons {
right: 10px;
bottom: 80px;
}
.scroll-btn {
width: 36px;
height: 36px;
}
}
/* 滚动条样式 */
.sidebar::-webkit-scrollbar {
width: 4px;
}
.sidebar::-webkit-scrollbar-track {
background: transparent;
}
.sidebar::-webkit-scrollbar-thumb {
background: rgba(255,255,255,0.2);
border-radius: 2px;
}
</style>
</head>
<body>
<!-- 顶部导航 -->
<nav class="top-nav">
<div class="top-nav-content">
<a href="../index.html" class="nav-link">返回首页</a>
<button class="nav-link" id="themeToggle">切换主题</button>
</div>
</nav>
<div class="container">
<header class="chapter-header">
<div class="chapter-number">Chapter 39</div>
<h1 class="chapter-title">{{CHAPTER_TITLE}}</h1>
</header>
<article class="chapter-content">
<p>击败熔岩穴的泰坦后,林克意识到自己的剑术还有提升空间。</p>
<p>虽然晨曦的龙之力强大但过度依赖外力会让自身的剑道停滞不前。在与克伦特商议后林克决定暂时返回赫顿玛尔向GSD请教更高深的剑魂技艺。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>GSD的院子里落叶纷飞。</p>
<p>"你来了。"盲眼剑士背对着林克,似乎早已感知到他的气息,"我等你很久了。"</p>
<p>"GSD大师。"林克恭敬地行礼,"我想学习更高深的剑术。"</p>
<p>GSD转过身空洞的眼眶"看"着林克:"你的剑气...已经触及到了'极'的境界。但剑魂之道,不仅仅是力量的积累,更是技巧的升华。"</p>
<p>他缓缓拔出太刀:"让我看看,你有没有资格学习'幻影剑舞'。"</p>
<p>林克握紧晨曦,摆出了战斗姿态。</p>
<p>GSD动了。</p>
<p>他的身形瞬间消失下一刻已经出现在林克身后林克只来得及侧身GSD的刀锋擦着他的衣角掠过。</p>
<p>"反应不错,但还不够。"GSD的声音从四面八方传来。</p>
<p>林克闭上眼睛将意识完全沉浸在剑气之中。他能感觉到GSD的每一次移动每一次呼吸。</p>
<p>就是现在!</p>
<p>"猛龙断空斩!"</p>
<p>金色巨龙咆哮而出但GSD只是轻轻一跃便躲过了这一击。</p>
<p>"依赖大招,会让你的基础变得薄弱。"GSD落在地上"剑魂的精髓,在于每一剑的精准与流畅。"</p>
<p>他再次攻来,这一次,他的刀化作无数残影,从不同的方向同时斩向林克!</p>
<p>林克拼命格挡但GSD的剑太快太准每一剑都精准地击中他防御的漏洞。</p>
<p>"这就是...幻影剑舞的基础。"GSD收刀"在高速移动中,连续斩出数十剑,每一剑都是实体,每一剑都能致命。"</p>
<p>林克喘着粗气,身上多了几道浅浅的伤口。但他眼中闪烁着兴奋的光芒——他终于看到了更高层次的剑道!</p>
<p>"请教我!"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>三天后,林克掌握了幻影剑舞的精髓。</p>
<p>这一招需要将全身的剑气凝聚到极致,然后在瞬间爆发,化作无数剑影同时攻击。与猛龙断空斩的爆发力不同,幻影剑舞更注重连续性和精准度。</p>
<p>"记住。"GSD叮嘱道"幻影剑舞消耗极大,不到关键时刻不要轻易使用。而且...它有一个致命的弱点。"</p>
<p>"什么弱点?"</p>
<p>"施展时,你无法移动。"GSD严肃地说"如果敌人躲过了第一轮攻击,你就成了活靶子。所以...必须找准时机。"</p>
<p>林克点点头,将这句话铭记在心。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>回到暗黑城,林克向克伦特说明了来意。</p>
<p>"暗黑城入口...那里确实还有一个威胁。"克伦特点头,"无头骑士,曾经是暗精灵王国最强的骑士,死后被诅咒成为亡灵。它的实力不比泰坦弱,而且...更加灵活。"</p>
<p>"正好,我想试试新学会的剑术。"林克握紧晨曦,眼中闪烁着自信的光芒。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>暗黑城入口是一片荒凉的山谷。</p>
<p>这里曾经是暗精灵王国的荣耀之门,如今却笼罩在永恒的阴霾之中。破碎的雕像,倒塌的石柱,无一不在诉说着昔日的辉煌与今日的凄凉。</p>
<p>而在山谷的尽头,一个黑色的身影正静静地站在那里。</p>
<p>无头骑士。</p>
<p>它身穿黑色的重型铠甲,铠甲上刻满了暗精灵的符文。原本应该长着头颅的地方,现在只剩下一个平整的切口,切口处燃烧着幽蓝色的魂火。它骑着一匹同样亡灵化的黑色战马,手中握着一柄长达三米的骑士枪。</p>
<p>"入侵者..."沙哑的声音从铠甲中传出,"离开...或者...死..."</p>
<p>林克举起晨曦,金色的光芒在阴霾中格外耀眼:"抱歉,我必须通过这里。"</p>
<p>"那么...战吧..."</p>
<p>无头骑士猛地一夹马腹,黑色战马发出一声嘶鸣,如同一道黑色闪电冲向林克!</p>
<p>"好快!"林克瞳孔一缩,这速度比刹影还要快!</p>
<p>他连忙侧身闪避,骑士枪擦着他的铠甲掠过,带起一串火花。</p>
<p>但无头骑士的攻击还没有结束。它猛地拉住缰绳,战马人立而起,然后双蹄重重踏下!</p>
<p>"践踏!"</p>
<p>轰——!!</p>
<p>地面剧烈震动,林克被震得站立不稳。无头骑士趁机再次冲锋,骑士枪直刺林克的胸口!</p>
<p>"破军升龙击!"</p>
<p>林克向上挑斩,将骑士枪格开,同时身形跃起,想要从上方攻击。</p>
<p>但无头骑士的反应极快,它收回骑士枪,枪身横扫,将跃起的林克击飞出去!</p>
<p>"可恶..."林克在空中调整身形,稳稳落地。</p>
<p>无头骑士没有给他喘息的机会,再次发动冲锋。这一次,它的枪身上缠绕着黑色的雾气,显然附带了暗影属性的攻击!</p>
<p>"死亡冲锋!"</p>
<p>"不能硬接!"林克咬牙,流心·跃发动,整个人跃向空中。</p>
<p>但无头骑士仿佛预判到了他的动作,在冲锋到一半时突然变向,枪尖直刺空中的林克!</p>
<p>"什么?!"林克大惊,这已经不是速度快的问题了,而是战斗经验太过丰富!</p>
<p>他勉强用晨曦格挡,但还是被巨大的冲击力震飞,重重撞在身后的石柱上。</p>
<p>"林克!"赛丽亚和奥菲利亚同时惊呼。</p>
<p>"我没事..."林克咬牙站起身,"这家伙...比想象中更难对付..."</p>
<p>无头骑士停下冲锋,幽蓝色的魂火静静地"注视"着他。</p>
<p>"你的...剑术...不错..."它沙哑地说,"但...还不够..."</p>
<p>它举起骑士枪,枪尖指向天空。下一刻,无数黑色的雾气从四面八方涌来,在它周围形成了数个小型的暗影漩涡!</p>
<p>"不好!它在召唤!"艾伦大喊,"大家小心!"</p>
<p>从暗影漩涡中,数十个骷髅士兵爬了出来,手持各种武器,向四人包围过来!</p>
<p>"赛丽亚,奥菲利亚,艾伦,那些骷髅交给你们!"林克握紧晨曦,"我来对付无头骑士!"</p>
<p>"明白!"三人齐声应道,各自迎战骷髅士兵。</p>
<p>林克深吸一口气,将全身的剑气凝聚。他知道,普通的攻击对无头骑士效果有限,必须找准时机,一击制胜!</p>
<p>无头骑士再次发动冲锋,这一次的速度比之前更快!黑色的战马化作一道残影,骑士枪直刺林克的咽喉!</p>
<p>"就是现在!"</p>
<p>林克猛地跃起,不是向后,而是向着无头骑士冲去!在半空中,他整个人开始旋转,晨曦化作无数金色的剑影,从四面八方同时斩向无头骑士!</p>
<p>"幻影剑舞!"</p>
<p>这是林克第一次在对战中使用这招!</p>
<p>金色的剑影如同暴风骤雨般笼罩了无头骑士,每一剑都带着破极兵刃的加成,每一剑都精准地斩向铠甲的缝隙!</p>
<p>无头骑士显然没料到这个变化,它拼命挥舞骑士枪格挡,但剑影太多,太密,它根本挡不过来!</p>
<p>铛铛铛铛铛——!!!</p>
<p>金属碰撞的声音连成一片,无头骑士的铠甲上出现了无数裂痕!它身下的战马发出痛苦的嘶鸣,被剑气斩得遍体鳞伤!</p>
<p>"不可能..."无头骑士第一次露出了震惊的情绪,"这种...剑术..."</p>
<p>幻影剑舞的最后一击,林克将全身的力量灌注于晨曦之上,一道巨大的金色剑气从天而降,将无头骑士从战马上斩落!</p>
<p>轰——!!</p>
<p>无头骑士重重地摔在地上,铠甲四分五裂,幽蓝色的魂火黯淡下来。</p>
<p>"你...赢了..."它沙哑地说,"终于...可以...安息了..."</p>
<p>幽蓝色的魂火渐渐熄灭,无头骑士的身体化作无数光点,消散在空气中。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>战斗结束,林克单膝跪地,大口喘着气。</p>
<p>幻影剑舞的消耗比他想象的还要大,几乎是猛龙断空斩的两倍。但威力也确实惊人,即使是强大的无头骑士,也无法抵挡。</p>
<p>"林克!"赛丽亚跑过来,脸上带着担忧,"你没事吧?"</p>
<p>"没事..."林克勉强笑了笑,"只是有点累..."</p>
<p>他站起身,看向暗黑城的方向。</p>
<p>无头骑士已经被击败,通往暗黑城的道路已经畅通。但他的旅程,还远未结束。</p>
<p>"走吧。"他轻声说,"下一个目标...万年雪山。"</p>
<p>"嗯!"</p>
<p>四人相视一笑,向着新的冒险出发。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0; margin-top: 2em;">(第三十九章完)</p>
</article>
</div>
<!-- 固定底部导航 -->
<nav class="fixed-nav">
<div class="fixed-nav-content">
<a href="chapter-38.html" class="nav-btn ">上一章</a>
<a href="../chapters.html" class="nav-btn">目录</a>
<a href="chapter-40.html" class="nav-btn ">下一章</a>
</div>
</nav>
<!-- 右侧滚动按钮 -->
<div class="scroll-buttons">
<button class="scroll-btn" id="scrollTop" title="回到顶部"></button>
<button class="scroll-btn" id="scrollBottom" title="回到底部"></button>
</div>
<!-- TTS语音朗读面板 -->
<div class="tts-panel" id="ttsPanel">
<div class="tts-title">语音朗读</div>
<div class="tts-controls">
<button class="tts-btn" id="ttsPlay" title="播放"></button>
<button class="tts-btn" id="ttsPause" title="暂停"></button>
<button class="tts-btn" id="ttsStop" title="停止"></button>
</div>
<div class="tts-progress">
<div class="tts-progress-bar">
<div class="tts-progress-fill" id="ttsProgressFill"></div>
</div>
<div class="tts-time" id="ttsTime">0 / 0</div>
</div>
<div class="tts-speed">
<span class="tts-speed-label">速度:</span>
<select class="tts-speed-select" id="ttsSpeed">
<option value="0.5">慢速</option>
<option value="0.75">较慢</option>
<option value="1" selected>正常</option>
<option value="1.25">较快</option>
<option value="1.5">快速</option>
<option value="2">极速</option>
</select>
</div>
</div>
<!-- 侧边栏章节导航 -->
<aside class="sidebar">
<div class="sidebar-title">章节导航</div>
<div class="sidebar-content" id="sidebarContent">
<a href="chapter-9.html" class="sidebar-chapter ">第9章转职之路</a>
<a href="chapter-10.html" class="sidebar-chapter ">第10章暗黑雷鸣废墟</a>
<a href="chapter-11.html" class="sidebar-chapter ">第11章剑魂转职仪式</a>
<a href="chapter-12.html" class="sidebar-chapter ">第12章西海岸</a>
<a href="chapter-13.html" class="sidebar-chapter ">第13章龙人之塔</a>
<a href="chapter-14.html" class="sidebar-chapter ">第14章人偶玄关</a>
<a href="chapter-15.html" class="sidebar-chapter ">第15章石巨人塔</a>
<a href="chapter-16.html" class="sidebar-chapter ">第16章黑暗玄廊</a>
<a href="chapter-17.html" class="sidebar-chapter ">第17章城主宫殿</a>
<a href="chapter-18.html" class="sidebar-chapter ">第18章番外·悬空城</a>
<a href="chapter-19.html" class="sidebar-chapter ">第19章天帷巨兽·神殿外围</a>
<a href="chapter-20.html" class="sidebar-chapter ">第20章树精丛林</a>
<a href="chapter-21.html" class="sidebar-chapter ">第21章炼狱</a>
<a href="chapter-22.html" class="sidebar-chapter ">第22章西海岸的闲暇</a>
<a href="chapter-23.html" class="sidebar-chapter ">第23章极昼</a>
<a href="chapter-24.html" class="sidebar-chapter ">第24章第一脊椎</a>
<a href="chapter-25.html" class="sidebar-chapter ">第25章赫顿玛尔的准备</a>
<a href="chapter-26.html" class="sidebar-chapter ">第26章第二脊椎</a>
<a href="chapter-27.html" class="sidebar-chapter ">第27章重逢的温柔</a>
<a href="chapter-28.html" class="sidebar-chapter ">第28章暗精灵的委托</a>
<a href="chapter-29.html" class="sidebar-chapter ">第29章阿法利亚营地</a>
<a href="chapter-30.html" class="sidebar-chapter ">第30章浅栖之地</a>
<a href="chapter-31.html" class="sidebar-chapter ">第31章蜘蛛洞穴</a>
<a href="chapter-32.html" class="sidebar-chapter ">第32章克伦特的委托</a>
<a href="chapter-33.html" class="sidebar-chapter ">第33章暗精灵墓地·左翼守卫</a>
<a href="chapter-34.html" class="sidebar-chapter ">第34章暗精灵墓地·剩余三将军</a>
<a href="chapter-35.html" class="sidebar-chapter ">第35章邪龙斯皮兹</a>
<a href="chapter-36.html" class="sidebar-chapter ">第36章莎兰的探望</a>
<a href="chapter-37.html" class="sidebar-chapter ">第37章暗影迷宫·影子剑士</a>
<a href="chapter-38.html" class="sidebar-chapter ">第38章熔岩穴·泰坦之怒</a>
<a href="chapter-39.html" class="sidebar-chapter current">第39章暗黑城入口·无头骑士</a>
<a href="chapter-40.html" class="sidebar-chapter ">第40章万年雪山·冰心少年</a>
<a href="chapter-41.html" class="sidebar-chapter ">第41章敏泰的加入</a>
<a href="chapter-42.html" class="sidebar-chapter ">第42章山脊·野兽师</a>
<a href="chapter-43.html" class="sidebar-chapter ">第43章番外·雪山温泉</a>
<a href="chapter-44.html" class="sidebar-chapter ">第44章白色废墟</a>
<a href="chapter-45.html" class="sidebar-chapter ">第45章冰雪宫殿</a>
<a href="chapter-46.html" class="sidebar-chapter ">第46章布万加修炼场</a>
<a href="chapter-47.html" class="sidebar-chapter ">第47章斯卡萨之巢·龙威</a>
<a href="chapter-48.html" class="sidebar-chapter ">第48章斯卡萨之巢·龙陨</a>
<a href="chapter-49.html" class="sidebar-chapter ">第49章重返赫顿玛尔</a>
<a href="chapter-50.html" class="sidebar-chapter ">第50章诺斯玛尔·盗贼团</a>
<a href="chapter-51.html" class="sidebar-chapter ">第51章哈穆林·鼠患</a>
<a href="chapter-52.html" class="sidebar-chapter ">第52章月光酒馆·寻找阿甘左</a>
<a href="chapter-53.html" class="sidebar-chapter ">第53章番外·帕丽丝的誓言</a>
<a href="chapter-54.html" class="sidebar-chapter ">第54章觉醒之路·启程</a>
<a href="chapter-55.html" class="sidebar-chapter ">第55章比尔马克帝国试验场</a>
<a href="chapter-56.html" class="sidebar-chapter ">第56章王的遗迹·远古五骑士</a>
<a href="chapter-57.html" class="sidebar-chapter ">第57章心灵试炼·剑圣觉醒</a>
<a href="chapter-58.html" class="sidebar-chapter ">第58章番外·后宫的温馨</a>
<a href="chapter-59.html" class="sidebar-chapter ">第59章敏泰的思念</a>
<a href="chapter-60.html" class="sidebar-chapter ">第60章敏泰加入·前往诺伊佩拉</a>
<a href="chapter-61.html" class="sidebar-chapter ">第61章悲鸣洞穴·阿甘左与卢克西</a>
<a href="chapter-62.html" class="sidebar-chapter ">第62章战前准备·痛苦之村的情报</a>
<a href="chapter-63.html" class="sidebar-chapter ">第63章痛苦之村列瑟芬·狄瑞吉的真身</a>
<a href="chapter-64.html" class="sidebar-chapter ">第64章胜利归来·赫顿玛尔的庆祝</a>
<a href="chapter-65.html" class="sidebar-chapter ">第65章正宫的专属时光·赛丽亚的深情</a>
<a href="chapter-66.html" class="sidebar-chapter ">第66章番外·五人同床·后宫大被同眠</a>
<a href="chapter-67.html" class="sidebar-chapter ">第67章热血八番街·火箭侠的阴谋</a>
<a href="chapter-68.html" class="sidebar-chapter ">第68章绿都格罗兹尼·魔雷者莫纳亨</a>
<a href="chapter-69.html" class="sidebar-chapter ">第69章魔雷者的苏醒·莫纳亨的抉择</a>
</div>
</aside>
<script>
// 记录阅读进度
let readChapters = JSON.parse(localStorage.getItem('readChapters') || '[]');
if (!readChapters.includes(39)) {
readChapters.push({{CHAPTER_ID}});
localStorage.setItem('readChapters', JSON.stringify(readChapters));
}
// 主题切换
const themeToggle = document.getElementById('themeToggle');
const savedTheme = localStorage.getItem('theme') || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
themeToggle.textContent = savedTheme === 'dark' ? '浅色' : '深色';
themeToggle.addEventListener('click', () => {
const currentTheme = document.documentElement.getAttribute('data-theme');
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
document.documentElement.setAttribute('data-theme', newTheme);
localStorage.setItem('theme', newTheme);
themeToggle.textContent = newTheme === 'dark' ? '浅色' : '深色';
});
// 滚动到顶部
document.getElementById('scrollTop').addEventListener('click', () => {
window.scrollTo({ top: 0, behavior: 'smooth' });
});
// 滚动到底部
document.getElementById('scrollBottom').addEventListener('click', () => {
window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' });
});
// 页面加载时,侧边栏自动滚动到当前章节
window.addEventListener('load', () => {
const sidebarContent = document.getElementById('sidebarContent');
const currentChapter = sidebarContent.querySelector('.current');
if (currentChapter) {
currentChapter.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
});
// ========== TTS语音朗读功能 ==========
let ttsSynth = window.speechSynthesis;
let ttsUtterance = null;
let ttsText = '';
let ttsSentences = [];
let ttsCurrentIndex = 0;
let ttsIsPlaying = false;
let ttsIsPaused = false;
let ttsSpeed = 1;
// 初始化:提取章节内容
function initTTS() {
const contentEl = document.querySelector('.chapter-content');
if (!contentEl) return;
// 获取所有段落文本清理HTML标签
ttsText = contentEl.innerText || contentEl.textContent;
// 分割成句子(中文按句号、问号、感叹号分割)
ttsSentences = ttsText.match(/[^。!?\n]+[。!?\n]+|[^。!?\n]+$/g) || [ttsText];
ttsSentences = ttsSentences.filter(s => s.trim().length > 0);
updateTTSProgress();
}
// 更新进度显示
function updateTTSProgress() {
const total = ttsSentences.length;
const current = ttsCurrentIndex;
document.getElementById('ttsTime').textContent = `${current} / ${total}`;
const percent = total > 0 ? (current / total * 100) : 0;
document.getElementById('ttsProgressFill').style.width = `${percent}%`;
}
// 播放当前句子
function playCurrentSentence() {
if (ttsCurrentIndex >= ttsSentences.length) {
stopTTS();
return;
}
const text = ttsSentences[ttsCurrentIndex].trim();
ttsUtterance = new SpeechSynthesisUtterance(text);
ttsUtterance.lang = 'zh-CN';
ttsUtterance.rate = ttsSpeed;
// 尝试选择中文语音
const voices = ttsSynth.getVoices();
const zhVoice = voices.find(v => v.lang.includes('zh') || v.lang.includes('CN'));
if (zhVoice) {
ttsUtterance.voice = zhVoice;
}
ttsUtterance.onend = () => {
if (ttsIsPlaying && !ttsIsPaused) {
ttsCurrentIndex++;
updateTTSProgress();
playCurrentSentence();
}
};
ttsUtterance.onerror = (e) => {
console.error('TTS error:', e);
if (ttsIsPlaying) {
ttsCurrentIndex++;
updateTTSProgress();
playCurrentSentence();
}
};
ttsSynth.speak(ttsUtterance);
}
// 播放
function playTTS() {
if (ttsSentences.length === 0) {
initTTS();
}
if (ttsIsPaused) {
ttsSynth.resume();
ttsIsPaused = false;
} else {
ttsIsPlaying = true;
playCurrentSentence();
}
document.getElementById('ttsPlay').classList.add('active');
document.getElementById('ttsPause').classList.remove('active');
}
// 暂停
function pauseTTS() {
if (ttsIsPlaying) {
ttsSynth.pause();
ttsIsPaused = true;
document.getElementById('ttsPlay').classList.remove('active');
document.getElementById('ttsPause').classList.add('active');
}
}
// 停止
function stopTTS() {
ttsSynth.cancel();
ttsIsPlaying = false;
ttsIsPaused = false;
ttsCurrentIndex = 0;
updateTTSProgress();
document.getElementById('ttsPlay').classList.remove('active');
document.getElementById('ttsPause').classList.remove('active');
}
// 设置速度
function setTTSSpeed(speed) {
ttsSpeed = parseFloat(speed);
// 如果正在播放,需要重新开始当前句子
if (ttsIsPlaying && !ttsIsPaused) {
ttsSynth.cancel();
playCurrentSentence();
}
}
// 绑定事件
document.getElementById('ttsPlay').addEventListener('click', playTTS);
document.getElementById('ttsPause').addEventListener('click', pauseTTS);
document.getElementById('ttsStop').addEventListener('click', stopTTS);
document.getElementById('ttsSpeed').addEventListener('change', (e) => setTTSSpeed(e.target.value));
// 加载语音列表(某些浏览器需要异步加载)
if (speechSynthesis.onvoiceschanged !== undefined) {
speechSynthesis.onvoiceschanged = initTTS;
}
// 页面加载时初始化
window.addEventListener('load', () => {
initTTS();
});
// 页面离开时停止播放
window.addEventListener('beforeunload', stopTTS);
</script>
</body>
</html>