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

936 lines
41 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 70</div>
<h1 class="chapter-title">{{CHAPTER_TITLE}}</h1>
</header>
<article class="chapter-content">
<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 style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>回到豪宅,六女已经帮林克准备好了行装。</p>
<p>"这些是天界专用的恢复药剂。"莎兰递过一个小包裹,"我特制的,效果比普通药剂强三倍。"</p>
<p>"这是我做的护身符。"敏泰红着脸塞给他一个小布袋,"里面装着雪山特有的冰晶,可以...可以保护你..."</p>
<p>"拿着这个。"帕丽丝扔给他一把匕首,"涂了剧毒,关键时刻能救命。"</p>
<p>"林克大人..."奥菲利亚递上一本小册子,"这是GBL教关于天界的古籍记载也许对你有帮助。"</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>"谁要特产!"帕丽丝红着眼眶骂道,"你只要平安回来就行了!"</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 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 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>"林克,我们需要你前往根特外围侦查敌情。"泽丁说道,"同时,有一批冒险家被卡勒特俘虏了,如果你能找到他们..."</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 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 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 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 style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</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-69.html" class="nav-btn ">上一章</a>
<a href="../chapters.html" class="nav-btn">目录</a>
<a href="chapter-71.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-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>
<a href="chapter-70.html" class="sidebar-chapter current">第70章天界之门·根特外围的战火</a>
<a href="chapter-71.html" class="sidebar-chapter ">第71章根特北门·泽丁的誓言</a>
<a href="chapter-72.html" class="sidebar-chapter ">第72章根特南门·马琳的效忠</a>
<a href="chapter-73.html" class="sidebar-chapter ">第73章根特防御战·钢铁与血肉的碰撞</a>
<a href="chapter-74.html" class="sidebar-chapter ">第74章夜间袭击战·银勺杂技团的覆灭</a>
<a href="chapter-75.html" class="sidebar-chapter ">第75章补给线阻断战·UM-0终结者</a>
<a href="chapter-76.html" class="sidebar-chapter ">第76章追击歼灭战·机械吉赛尔的末路</a>
<a href="chapter-77.html" class="sidebar-chapter ">第77章海上列车·鲁夫特悬空海港</a>
<a href="chapter-78.html" class="sidebar-chapter ">第78章列车上的海贼·铁鳞团的覆灭</a>
<a href="chapter-79.html" class="sidebar-chapter ">第79章夺回西部线·卡勒特的余孽</a>
<a href="chapter-80.html" class="sidebar-chapter ">第80章雾都赫伊斯·无法地带的阴影</a>
<a href="chapter-81.html" class="sidebar-chapter ">第81章阿登高地·GT-9600</a>
<a href="chapter-82.html" class="sidebar-chapter ">第82章卡勒特指挥部·兰蒂卢斯</a>
<a href="chapter-83.html" class="sidebar-chapter ">第83章皇女的告白·天界的新篇章</a>
<a href="chapter-84.html" class="sidebar-chapter ">第84章幽灵列车·亡者的低语</a>
<a href="chapter-85.html" class="sidebar-chapter ">第85章伊顿工业区·克雷发电站</a>
<a href="chapter-86.html" class="sidebar-chapter ">第86章普鲁兹发电站·闪电之帕特里斯</a>
<a href="chapter-87.html" class="sidebar-chapter ">第87章特伦斯发电站·熔岩之萨姆</a>
<a href="chapter-88.html" class="sidebar-chapter ">第88章格兰迪发电站·虚空之弗曼</a>
<a href="chapter-89.html" class="sidebar-chapter ">第89章安图恩攻坚战·黑雾之源</a>
<a href="chapter-90.html" class="sidebar-chapter ">第90章安图恩攻坚战·震颤的大地</a>
<a href="chapter-91.html" class="sidebar-chapter ">第91章安图恩攻坚战·擎天之柱</a>
<a href="chapter-92.html" class="sidebar-chapter ">第92章安图恩攻坚战·黑色火山</a>
<a href="chapter-93.html" class="sidebar-chapter ">第93章安图恩攻坚战·使徒陨落</a>
<a href="chapter-94.html" class="sidebar-chapter ">第94章克洛诺斯岛·寂静城的召唤</a>
<a href="chapter-95.html" class="sidebar-chapter ">第95章寂静城的秘密</a>
<a href="chapter-96.html" class="sidebar-chapter ">第96章番外·贝奇的献身</a>
<a href="chapter-97.html" class="sidebar-chapter ">第97章光之舞会</a>
<a href="chapter-98.html" class="sidebar-chapter ">第98章钢铁之臂</a>
<a href="chapter-99.html" class="sidebar-chapter ">第99章能源熔炉</a>
<a href="chapter-100.html" class="sidebar-chapter ">第100章王之书库</a>
</div>
</aside>
<script>
// 记录阅读进度
let readChapters = JSON.parse(localStorage.getItem('readChapters') || '[]');
if (!readChapters.includes(70)) {
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>