《我有一个梦想》 有声绘本
将金于 1963 年的演讲重制为横向有声书,包含 16 个黑白摄影场景、男中低音旁白和随音频同步高亮的字幕。
正在加载预览…
12969 views
# 创建并部署互动 HTML:写实黑白摄影风格 + 男声旁白《我有一个梦想》互动有声书(英文页面)
## 1. 总体目标
将马丁·路德·金于 1963 年 8 月 28 日发表的完整演讲(《我有一个梦想》文本)制作成横向全屏有声书:
1. 16 幅超写实黑白摄影插图(1920×1080、高对比度、胶片颗粒、50 mm 定焦镜头视角)
2. 16 段音频旁白(原创男中音,每段 15-25 秒,44.1 kHz、MP3、礼堂混响)
3. 英文网页:横向滚动、自动/手动翻页、字幕同步高亮、适配 PC 和移动端
4. 一键部署包(index.html / assets / README.md)
---
## 2. 全文分镜与时间线(共 16 页)
| 页码 | 起始句(英文原文) | 视觉事件 | 构图与光线 | 关键声音 |
|---|---|---|---|---|
| 1 | 我很高兴今天能与你们相聚…… | 远景中的林肯纪念堂、聚集的人群、逆光剪影 | 低机位拍摄,天空高光,人物呈剪影 | “我很高兴与你们相聚……”开场,礼堂回声 |
| 2 | ……将作为最伟大的示威活动载入史册…… | 密集人群的俯视画面,横幅写着“我们要求平等权利” | 航拍黑白画面,高对比度 | 持续铺陈,背景中传来远处掌声 |
| 3 | 但一百年后…… | 《解放宣言》纪念碑特写,缠绕着锈蚀锁链 | 中焦距,深色背景突出纪念碑 | 放缓语速,强调“一百年后” |
| 4 | 黑人生活在一座孤独的岛屿上…… | 一名孤立的黑人男子坐在废墟上,凝望远方城市 | 广角镜头,前景深黑,远处摩天楼被照亮 | 孤寂的环境声 |
| 5 | ……种族隔离的镣铐…… | 戴着镣铐的双手特写,锁链部分断裂 | 微距,强光照在手部,链环高光鲜明 | 镣铐碰撞声 + 男声低语 |
| 6 | ……歧视的锁链。 | 被拒之门外的黑人青年,“仅限白人”标志 | 从门缝视角拍摄,标志过曝 | 门被“砰地”关上的声音 |
| 7 | 我们来到这里兑现这张支票…… | 银行柜台前,一名黑人递出空白支票 | 对称构图,柜台灯光照亮画面 | 纸张滑动声 |
| 8 | 这对国家将是致命的…… | 法官木槌悬在半空,背景人群虚化 | 低机位,木槌剪影 | 木槌声的延迟回响 |
| 9 | 我们不能独自前行。 | 黑人和白人的手交叠,肤色各异 | 柔光箱顶光,手部纹理清晰 | 低频心跳声 |
|10| 我们不能回头。 | 逆光中的游行人群,前方是一道光门 | 逆光,人物边缘泛光 | 同步脚步声、低频鼓点 |
|11| 今天我有一个梦想!(第 1 次) | 仰望光线的孩子,眼中映着光 | 眼部特写,针尖般高光 | 首次高喊“我有一个梦想!”,带回声 |
|12| 我梦想有一天…… | 白人和黑人少年并肩奔跑 | 动态跟拍,胶片颗粒 | 呼吸声 + 风声 |
|13| ……昔日奴隶的儿子……坐在一起…… | 大学长椅上,两名学生一起阅读 | 水平对称构图,背景虚化 | 书页翻动声 |
|14| 今天我有一个梦想!(第 2 次) | 演讲者侧脸,张开的嘴,背景为光斑 | 35 mm 镜头,逆光中尘埃漂浮 | 第二次高喊,人群齐声回应 |
|15| 让自由响彻…… | 自由钟特写,裂缝清晰可见 | 顶光,钟体高亮,黑色背景 | 持续的钟声 |
|16| 终于自由了!终于自由了! | 鸟群向上飞起,人群举起双手 | 高速快门,定格翅膀动作 | “终于自由了!”连呼三遍,雷鸣般掌声 |
---
## 3. 统一图像生成提示词
超写实黑白摄影,50 mm 镜头,高对比度,胶片颗粒,浅景深,[Page-X Scene],20 世纪 60 年代民权集会,林肯纪念堂背景,决定性瞬间,--ar 16:9 --v 5 --q 2
将 `Page-X Scene` 替换为每页对应的事件;保持一致的颗粒感与对比度。
---
## 4. 统一音频生成提示词
男中音,MLK 风格的演讲方式,缓慢节奏,国会大厦大厅混响,44.1 kHz,128 kbps MP3,15-25 秒,[Starting Sentence],强调“我有一个梦想”,峰值 -3 dB
每段音频以该页的起始句作为旁白内容,结尾加入 1 秒掌声淡出。
---
## 5. 网页技术栈与目录
dream-web/
├─ index.html
├─ css/dream.css
├─ js/dream.js
├─ assets/
│ ├─ img/ page-01.jpg ~ page-16.jpg
│ └─ audio/ 01.mp3 ~ 16.mp3
└─ README.md
- 零依赖,原生 JS
- 横向滚动条,每页占满 100 vw/vh
- 字幕与音频同步高亮
- 控件:播放 / 暂停 / 下一页 / 上一页 / 静音
---
## 6. 关键代码(必需)
```html
<!-- index.html snip -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>I Have a Dream – Audio Picture Book</title>
<link href="https://fonts.googleapis.com/css2?family=Crimson+Text:ital ,wght@0,400;1,600&display=swap" rel="stylesheet">
<body>
<div class="viewport">
<div class="strip" id="strip"><!-- 16 pages --></div>
</div>
<div class="controls">
<button id="play">▶</button>
<button id="mute">🔊</button>
<div class="progress"><div id="bar"></div></div>
</div>
<audio id="voice"></audio>
<script src="js/dream.js"></script>
</body>
```
JavaScript
```javascript
// dream.js core
const PAGES=[/* 16 entries of {img, audio, text} */];
let idx=0, voice=document.getElementById('voice');
function loadPage(n){
strip.style.transform=`translateX(-${n*100}vw)`;
voice.src=PAGES[n].audio; voice.play();
}
voice.addEventListener('ended',()=>{idx++; loadPage(idx);});
document.getElementById('play').onclick=()=>voice.paused?voice.play():voice.pause();
```
## 7. 一键部署
README 包含链接和音效开关说明。
## 8. 交付自检
[ ] 16 张黑白 JPG,命名为 page-01 ~ page-16,≤ 600 KB
[ ] 16 个 MP3,命名为 01.mp3 ~ 16.mp3,≤ 400 KB
[ ] 网页可横向滑动且不出现空白屏,字幕随音频高亮
[ ] 自动弹出移动端横屏提示# 创建并部署互动 HTML:写实黑白摄影风格 + 男声旁白 《我有一个梦想》互动有声书(英文页面) ## 1. 总体目标 将 马丁·路德·金于 1963 年 8 月 28 日发表的完整演讲(《我有一个梦想》文本) 制作成横向全屏有声书: 1. 16 幅超写实黑白摄影插图(1920×1080、高对比度、胶片颗粒、50 mm 定焦镜头视角) 2. 16 段音频旁白(原创男中音,每段 15-25 秒,44.1 kHz、MP3、礼堂混响) 3. 英文网页:横向滚动、自动/手动翻页、字幕同步高亮、适配 PC 和移动端 4. 一键部署包(index.html / assets / README.md) --- ## 2. 全文分镜与时间线(共 16 页) | 页码 | 起始句(英文原文) | 视觉事件 | 构图与光线 | 关键声音 | |---|---|---|---|---| | 1 | 我很高兴今天能与你们相聚…… | 远景中的林肯纪念堂、聚集的人群、逆光剪影 | 低机位拍摄,天空高光,人物呈剪影 | “我很高兴与你们相聚……”开场,礼堂回声 | | 2 | ……将作为最伟大的示威活动载入史册…… | 密集人群的俯视画面,横幅写着“我们要求平等权利” | 航拍黑白画面,高对比度 | 持续铺陈,背景中传来远处掌声 | | 3 | 但一百年后…… | 《解放宣言》纪念碑特写,缠绕着锈蚀锁链 | 中焦距,深色背景突出纪念碑 | 放缓语速,强调“一百年后” | | 4 | 黑人生活在一座孤独的岛屿上…… | 一名孤立的黑人男子坐在废墟上,凝望远方城市 | 广角镜头,前景深黑,远处摩天楼被照亮 | 孤寂的环境声 | | 5 | ……种族隔离的镣铐…… | 戴着镣铐的双手特写,锁链部分断裂 | 微距,强光照在手部,链环高光鲜明 | 镣铐碰撞声 + 男声低语 | | 6 | ……歧视的锁链。 | 被拒之门外的黑人青年,“仅限白人”标志 | 从门缝视角拍摄,标志过曝 | 门被“砰地”关上的声音 | | 7 | 我们来到这里兑现这张支票…… | 银行柜台前,一名黑人递出空白支票 | 对称构图,柜台灯光照亮画面 | 纸张滑动声 | | 8 | 这对国家将是致命的…… | 法官木槌悬在半空,背景人群虚化 | 低机位,木槌剪影 | 木槌声的延迟回响 | | 9 | 我们不能独自前行。 | 黑人和白人的手交叠,肤色各异 | 柔光箱顶光,手部纹理清晰 | 低频心跳声 | |10| 我们不能回头。 | 逆光中的游行人群,前方是一道光门 | 逆光,人物边缘泛光 | 同步脚步声、低频鼓点 | |11| 今天我有一个梦想!(第 1 次) | 仰望光线的孩子,眼中映着光 | 眼部特写,针尖般高光 | 首次高喊“我有一个梦想!”,带回声 | |12| 我梦想有一天…… | 白人和黑人少年并肩奔跑 | 动态跟拍,胶片颗粒 | 呼吸声 + 风声 | |13| ……昔日奴隶的儿子……坐在一起…… | 大学长椅上,两名学生一起阅读 | 水平对称构图,背景虚化 | 书页翻动声 | |14| 今天我有一个梦想!(第 2 次) | 演讲者侧脸,张开的嘴,背景为光斑 | 35 mm 镜头,逆光中尘埃漂浮 | 第二次高喊,人群齐声回应 | |15| 让自由响彻…… | 自由钟特写,裂缝清晰可见 | 顶光,钟体高亮,黑色背景 | 持续的钟声 | |16| 终于自由了!终于自由了! | 鸟群向上飞起,人群举起双手 | 高速快门,定格翅膀动作 | “终于自由了!”连呼三遍,雷鸣般掌声 | --- ## 3. 统一图像生成提示词 超写实 20 世纪 60 年代民权集会,林肯纪念堂背景, 决定性瞬间,--ar 16:9 --v 5 --q 2 将 `Page-X Scene` 替换为每页对应的事件;保持一致的颗粒感与对比度。 --- ## 4. 统一音频生成提示词 男中音,MLK 风格的演讲方式, 缓慢节奏,国会大厦大厅混响,44.1 kHz,128 kbps MP3,15-25 秒,[Starting Sentence],强调“我有一个梦想”, 峰值 -3 dB 每段音频以该页的起始句作为旁白内容,结尾加入 1 秒掌声淡出。 --- ## 5. 网页技术栈与目录 dream-web/ ├─ index.html ├─ css/dream.css ├─ js/dream.js ├─ assets/ │ ├─ img/ page-01.jpg ~ page-16.jpg │ └─ audio/ 01.mp3 ~ 16.mp3 └─ README.md - 零依赖,原生 JS - 横向滚动条,每页占满 100 vw/vh - 字幕与音频同步高亮 - 控件:播放 / 暂停 / 下一页 / 上一页 / 静音 --- ## 6. 关键代码(必需) ```html <!-- index.html snip --> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>I Have a Dream – Audio Picture Book</title> <link href="https://fonts.googleapis.com/css2?family=Crimson+Text:ital ,wght@0,400;1,600&display=swap" rel="stylesheet"> <body> <div class="viewport"> <div class="strip" id="strip"><!-- 16 pages --></div> </div> <div class="controls"> <button id="play">▶</button> <button id="mute">🔊</button> <div class="progress"><div id="bar"></div></div> </div> <audio id="voice"></audio> <script src="js/dream.js"></script> </body> ``` JavaScript ```javascript // dream.js core const PAGES=[/* 16 entries of {img, audio, text} */]; let idx=0, voice=document.getElementById('voice'); function loadPage(n){ strip.style.transform=`translateX(-${n*100}vw)`; voice.src=PAGES[n].audio; voice.play(); } voice.addEventListener('ended',()=>{idx++; loadPage(idx);}); document.getElementById('play').onclick=()=>voice.paused?voice.play():voice.pause(); ``` ## 7. 一键部署 README 包含链接和音效开关说明。 ## 8. 交付自检 [ ] 16 张黑白 JPG,命名为 page-01 ~ page-16,≤ 600 KB [ ] 16 个 MP3,命名为 01.mp3 ~ 16.mp3,≤ 400 KB [ ] 网页可横向滑动且不出现空白屏,字幕随音频高亮 [ ] 自动弹出移动端横屏提示
# 创建并部署互动 HTML:写实 黑白 摄影风格 + 男声旁白《我有一个梦想》互动有声书(英文页面) ## 1. 总体目标 将马丁·路德·金于 1963 年 8 月 28 日发表的完整演讲(《我有一个梦想》文本)制作成横向全屏有声书: 1. 16 幅超写实 黑白 摄影插图(1920×1080、高对比度、胶片颗粒、50 mm 定焦镜头视角) 2. 16 段音频旁白(原创男中音,每段 15-25 秒,44.1 kHz、MP3、礼堂混响) 3. 英文网页:横向滚动、自动/手动翻页、字幕同步高亮、适配 PC 和移动端 4. 一键部署包(index.html / assets / README.md) --- ## 2. 全文分镜与时间线(共 16 页) | 页码 | 起始句(英文原文) | 视觉事件 | 构图与光线 | 关键声音 | |---|---|---|---|---| | 1 | 我很高兴今天能与你们相聚…… | 远景中的林肯纪念堂、聚集的人群、逆光剪影 | 低机位拍摄,天空高光,人物呈剪影 | “我很高兴与你们相聚……”开场,礼堂回声 | | 2 | ……将作为最伟大的示威活动载入史册…… | 密集人群的俯视画面,横幅写着“我们要求平等权利” | 航拍 黑白,高对比度 | 持续铺陈,背景中传来远处掌声 | | 3 | 但一百年后…… | 《解放宣言》纪念碑特写,缠绕着锈蚀锁链 | 中焦距,深色背景突出纪念碑 | 放缓语速,强调“一百年后” | | 4 | 黑人生活在一座孤独的岛屿上…… | 一名孤立的黑人男子坐在废墟上,凝望远方城市 | 广角镜头,前景深黑,远处摩天楼被照亮 | 孤寂的环境声 | | 5 | ……种族隔离的镣铐…… | 戴着镣铐的双手特写,锁链部分断裂 | 微距,强光照在手部,链环高光鲜明 | 镣铐碰撞声 + 男声低语 | | 6 | ……歧视的锁链。 | 被拒之门外的黑人青年,“仅限白人”标志 | 从门缝视角拍摄,标志过曝 | 门被“砰地”关上的声音 | | 7 | 我们来到这里兑现这张支票…… | 银行柜台前,一名黑人递出空白支票 | 对称构图,柜台灯光照亮画面 | 纸张滑动声 | | 8 | 这对国家将是致命的…… | 法官木槌悬在半空,背景人群虚化 | 低机位,木槌剪影 | 木槌声的延迟回响 | | 9 | 我们不能独自前行。 | 黑人和白人的手交叠,肤色各异 | 柔光箱顶光,手部纹理清晰 | 低频心跳声 | |10| 我们不能回头。 | 逆光中的游行人群,前方是一道光门 | 逆光,人物边缘泛光 | 同步脚步声、低频鼓点 | |11| 今天我有一个梦想!(第 1 次) | 仰望光线的孩子,眼中映着光 | 眼部特写,针尖般高光 | 首次高喊“我有一个梦想!”,带回声 | |12| 我梦想有一天…… | 白人和黑人少年并肩奔跑 | 动态跟拍,胶片颗粒 | 呼吸声 + 风声 | |13| ……昔日奴隶的儿子……坐在一起…… | 大学长椅上,两名学生一起阅读 | 水平对称构图,背景虚化 | 书页翻动声 | |14| 今天我有一个梦想!(第 2 次) | 演讲者侧脸,张开的嘴,背景为光斑 | 35 mm 镜头,逆光中尘埃漂浮 | 第二次高喊,人群齐声回应 | |15| 让自由响彻…… | 自由钟特写,裂缝清晰可见 | 顶光,钟体高亮,黑色背景 | 持续的钟声 | |16| 终于自由了!终于自由了! | 鸟群向上飞起,人群举起双手 | 高速快门,定格翅膀动作 | “终于自由了!”连呼三遍,雷鸣般掌声 | --- ## 3. 统一图像生成提示词 超写实 黑白 照片,50 mm 镜头,高对比度,胶片颗粒感,浅景深,[Page-X Scene],20 世纪 60 年代民权集会,林肯纪念堂背景,决定性瞬间,--ar 16:9 --v 5 --q 2 将 `Page-X Scene` 替换为每一页对应的事件;保持一致的颗粒感和对比度。 --- ## 4. 统一音频生成提示词 男中低音,MLK 风格演绎,缓慢节奏,国会大厦大厅混响,44.1 kHz,128 kbps MP3,15-25 秒,[起始句],突出 "I have a dream",-3 dB 峰值 每段音频以该页的起始句作为旁白内容,结尾加入 1 秒的掌声淡出。 --- ## 5. Web 技术栈与目录 dream-web/ ├─ index.html ├─ css/dream.css ├─ js/dream.js ├─ assets/ │ ├─ img/ page-01.jpg ~ page-16.jpg │ └─ audio/ 01.mp3 ~ 16.mp3 └─ README.md - 零依赖,原生 JS - 水平滚动条,每页 100 vw/vh - 字幕高亮与音频同步 - 控制项:播放 / 暂停 / 下一页 / 上一页 / 静音 --- ## 6. 关键代码(必需) ```html <!-- index.html snip --> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>I Have a Dream – Audio Picture Book</title> <link href="https://fonts.googleapis.com/css2?family=Crimson+Text:ital ,wght@0,400;1,600&display=swap" rel="stylesheet"> <body> <div class="viewport"> <div class="strip" id="strip"><!-- 16 pages --></div> </div> <div class="controls"> <button id="play">▶</button> <button id="mute">🔊</button> <div class="progress"><div id="bar"></div></div> </div> <audio id="voice"></audio> <script src="js/dream.js"></script> </body> ``` JavaScript ```javascript // dream.js core const PAGES=[/* 16 entries of {img, audio, text} */]; let idx=0, voice=document.getElementById('voice'); function loadPage(n){ strip.style.transform=`translateX(-${n*100}vw)`; voice.src=PAGES[n].audio; voice.play(); } voice.addEventListener('ended',()=>{idx++; loadPage(idx);}); document.getElementById('play').onclick=()=>voice.paused?voice.play():voice.pause(); ``` ## 7. 一键部署 README 包含链接和音频效果切换说明。 ## 8. 交付自检 [ ] 16 黑白 张 JPG,命名为 page-01 ~ page-16,≤ 600 KB [ ] 16 个 MP3,命名为 01.mp3 ~ 16.mp3,≤ 400 KB [ ] 网页可横向滑动且不出现空白屏,字幕随音频高亮 [ ] 自动弹出移动端横屏提示
# 创建并部署交互式 HTML:《我有一个梦想》互动有声书(英文页面),写实黑白摄影风格 + 男声旁白 ## 1. 总体目标 将马丁·路德·金于 1963 年 8 月 28 日发表的完整演讲(《I Have a Dream》文本)制作成一部横向全屏有声书: 1. 16 幅超写实黑白摄影插图(1920×1080、高对比度、胶片颗粒感、50 mm 定焦镜头视角) 2. 16 段音频旁白(原创男中低音,每段 15-25 秒,44.1 kHz、MP3、礼堂混响) 3. 英文网页:横向滚动,自动/手动翻页,字幕同步高亮,适配 PC 和移动端 4. 一键部署包(index.html / assets / README.md) --- ## 2. 完整文本分镜与时间线(共 16 页) | 页面 | 起始句(英文原文) | 视觉事件 | 构图与光线 | 关键声音 | |---|---|---|---|---| | 1 | I am happy to join with you today... | 林肯纪念堂远景,人群聚集,逆光剪影 | 低机位拍摄,天空高光,人物呈剪影 | "I am happy to join with you..." 开场,礼堂回声 | | 2 | ...will go down as the greatest demonstration... | 密集人群俯瞰画面,横幅写着 "We Demand Equal Rights" | 黑白航拍,高对比度 | 情绪持续铺陈,背景中有远处掌声 | | 3 | But one hundred years later... | 《解放宣言》纪念碑特写,缠绕着生锈的锁链 | 中焦距,深色背景突出纪念碑 | 放慢语速,强调 "one hundred years later" | | 4 | the Negro lives on a lonely island... | 一名孤立的黑人男子坐在废墟上,眺望远方城市 | 广角镜头,前景深黑,远处摩天楼被照亮 | 孤寂的环境声 | | 5 | ...the manacles of segregation... | 戴着镣铐的双手特写,锁链部分断裂 | 微距拍摄,强光打在手上,链环高亮 | 镣铐碰撞声 + 男声低语 | | 6 | ...chains of discrimination. | 黑人青年在门口遭拒,标牌写着 "WHITES ONLY" | 门缝视角,标牌过曝 | 门砰然关上的声音 | | 7 | We have come to cash this check... | 银行柜台前,黑人递出一张空白支票 | 对称构图,柜台灯光照亮人物 | 纸张滑动声 | | 8 | It would be fatal for the nation... | 法官木槌悬在半空,背景人群虚化 | 低机位,木槌剪影 | 木槌声的延迟回响 | | 9 | We cannot walk alone. | 黑人和白人的手交叠,不同肤色清晰可见 | 柔光箱顶光,手部纹理清晰 | 低频心跳声 | |10| We cannot turn back. | 逆光中的游行人群,前方有光之入口 | 逆光,人物边缘泛光 | 同步脚步声、低频鼓点 | |11| I have a dream today! (1st) | 儿童仰望光芒,眼中映出光影 | 眼部特写,针尖般的高光 | 第一次高喊 "I have a dream!",带回声 | |12| I have a dream that one day... | 白人和黑人少年并肩奔跑 | 动态跟拍,胶片颗粒感 | 呼吸声 + 风声 | |13| ...sons of former slaves... sit together... | 大学长椅上,两名学生一起阅读 | 水平对称构图,背景虚化 | 书页翻动声 | |14| I have a dream today! (2nd) | 演讲者侧脸,张口呼喊,背景有光斑 | 35 mm 镜头,逆光下尘粒飘浮 | 第二次高喊,人群齐声回应 | |15| Let freedom ring... | 自由钟特写,裂缝清晰可见 | 顶光,钟身高亮,黑色背景 | 悠长的钟声 | |16| Free at last! Free at last! | 鸟儿向上飞翔,人群举起双手 | 高速快门,定格翅膀运动 | "Free at last!" 重复三遍,雷鸣般的掌声 | --- ## 3. 统一图像生成提示词 超写实黑白照片,50 mm 镜头,高对比度,胶片颗粒感,浅景深,[Page-X Scene],20 世纪 60 年代民权集会,林肯纪念堂背景,决定性瞬间,--ar 16:9 --v 5 --q 2 将 `Page-X Scene` 替换为每一页对应的事件;保持一致的颗粒感和对比度。 --- ## 4. 统一音频生成提示词 男中低音,MLK 风格演绎,缓慢节奏,国会大厦大厅混响,44.1 kHz,128 kbps MP3,15-25 秒,[起始句],突出 "I have a dream",-3 dB 峰值 每段音频以该页的起始句作为旁白内容,结尾加入 1 秒的掌声淡出。 --- ## 5. Web 技术栈与目录 dream-web/ ├─ index.html ├─ css/dream.css ├─ js/dream.js ├─ assets/ │ ├─ img/ page-01.jpg ~ page-16.jpg │ └─ audio/ 01.mp3 ~ 16.mp3 └─ README.md - 零依赖,原生 JS - 水平滚动条,每页 100 vw/vh - 字幕高亮与音频同步 - 控制项:播放 / 暂停 / 下一页 / 上一页 / 静音 --- ## 6. 关键代码(必需) ```html <!-- index.html snip --> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>I Have a Dream – Audio Picture Book</title> <link href="https://fonts.googleapis.com/css2?family=Crimson+Text:ital ,wght@0,400;1,600&display=swap" rel="stylesheet"> <body> <div class="viewport"> <div class="strip" id="strip"><!-- 16 pages --></div> </div> <div class="controls"> <button id="play">▶</button> <button id="mute">🔊</button> <div class="progress"><div id="bar"></div></div> </div> <audio id="voice"></audio> <script src="js/dream.js"></script> </body> ``` JavaScript ```javascript // dream.js core const PAGES=[/* 16 entries of {img, audio, text} */]; let idx=0, voice=document.getElementById('voice'); function loadPage(n){ strip.style.transform=`translateX(-${n*100}vw)`; voice.src=PAGES[n].audio; voice.play(); } voice.addEventListener('ended',()=>{idx++; loadPage(idx);}); document.getElementById('play').onclick=()=>voice.paused?voice.play():voice.pause(); ``` ## 7. 一键部署 README 包含链接和音频效果切换说明。 ## 8. 交付自检 [ ] 16 张黑白 JPG,命名为 page-01 ~ page-16,≤ 600 KB [ ] 16 个 MP3,命名为 01.mp3 ~ 16.mp3,≤ 400 KB [ ] 网页横向滑动时不出现空白屏幕,字幕随音频高亮 [ ] 自动弹出手机横屏提示