jianzhihuixiang/alacarte-novel-website/chapters/chapter-67.html

941 lines
40 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: 1002;
background: rgba(0,0,0,0.6);
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;
right: 10px;
bottom: auto;
top: 60px;
min-width: auto;
padding: 12px;
width: auto;
z-index: 1003;
}
.tts-btn {
width: 32px;
height: 32px;
font-size: 12px;
}
.tts-title {
font-size: 11px;
}
.tts-speed-label {
font-size: 11px;
}
.tts-speed-select {
padding: 3px 6px;
font-size: 11px;
}
.tts-time {
font-size: 11px;
min-width: 60px;
}
/* 手机端隐藏滚动按钮给TTS腾空间 */
.scroll-buttons {
display: none;
}
}
@media (max-width: 400px) {
.tts-panel {
top: 55px;
padding: 10px;
}
.tts-controls {
gap: 6px;
}
.tts-btn {
width: 28px;
height: 28px;
font-size: 11px;
}
}
/* 侧边栏 - 标题固定,内容滚动 */
.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 67</div>
<h1 class="chapter-title">{{CHAPTER_TITLE}}</h1>
</header>
<article class="chapter-content">
<p>诺斯玛尔的夜晚,月光被厚重的云层遮蔽,只剩下几盏昏黄的路灯在风中摇曳。</p>
<p>林克站在赫顿玛尔后街的入口身旁是赛丽亚、敏泰、帕丽丝、莎兰和奥菲利亚五位后宫。经过第66章的亲密之夜六人之间的羁绊更加深厚但此刻他们的表情都很凝重。</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>林克挥动着光剑剑圣的实力在此刻展现无遗。他的剑光如同流星般划过将敌人一一击倒。赛丽亚在后方施展治愈魔法为队友恢复体力敏泰的冰霜箭矢精准地命中敌人的要害莎兰的魔法轰炸将成群的敌人消灭奥菲利亚则召唤出GBL教的神秘力量协助战斗。</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>"明白!"奥菲利亚双手合十,"GBL教的秘术发动一道精神冲击波射向火箭侠。"</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; margin-top: 2em;">(第六十七章完)</p>
</article>
</div>
<!-- 固定底部导航 -->
<nav class="fixed-nav">
<div class="fixed-nav-content">
<a href="chapter-66.html" class="nav-btn ">上一章</a>
<a href="../chapters.html" class="nav-btn">目录</a>
<a href="chapter-68.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-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 ">第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 current">第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 ">第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>
</div>
</aside>
<script>
// 记录阅读进度
let readChapters = JSON.parse(localStorage.getItem('readChapters') || '[]');
if (!readChapters.includes(67)) {
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>