Files
MyAiDesk/GovAI/videos/fazhitong-promo/compositions/s5-ppt.html
T
freedak f7a720204a Update: 将子项目从 submodule 转为完整内容
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用
- 添加所有子项目的完整源代码
- 保留原始 .git 为 .git.bak 备份
2026-07-04 19:20:46 +08:00

283 lines
6.6 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">
<title>S5 - 一键生成汇报</title>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js"></script>
<style>
:root {
--bg-deep: #0A1A33;
--bg-panel: #10243F;
--brand-blue: #1E5BC6;
--gold: #D4A437;
--seal-red: #C0392B;
--text-hi: #F2F6FC;
--text-lo: #9DB2CE;
--line: #2A436B;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
width: 1920px;
height: 1080px;
overflow: hidden;
font-family: "PingFang SC", "Source Han Sans SC", "Helvetica Neue", sans-serif;
background: var(--bg-deep);
position: relative;
}
.clip {
position: absolute;
}
/* 输入框 */
.input-box {
width: 800px;
height: 120px;
background: var(--bg-panel);
border: 2px solid var(--line);
border-radius: 12px;
display: flex;
align-items: center;
padding: 0 32px;
font-size: 32px;
color: var(--text-lo);
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);
}
/* 生成按钮 */
.generate-btn {
width: 200px;
height: 80px;
background: var(--brand-blue);
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
font-weight: bold;
color: var(--text-hi);
cursor: pointer;
box-shadow: 0 4px 16px rgba(30, 91, 198, 0.6);
}
/* PPT 卡片 */
.ppt-card {
width: 360px;
height: 240px;
background: white;
border-radius: 8px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
font-weight: 600;
color: #333;
position: relative;
overflow: hidden;
}
.ppt-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 60px;
background: linear-gradient(135deg, var(--brand-blue), var(--gold));
}
.ppt-card-content {
margin-top: 40px;
}
/* PPT 网格 */
.ppt-grid {
display: grid;
grid-template-columns: repeat(3, 360px);
gap: 40px;
}
/* 标注 */
.annotation {
display: flex;
gap: 24px;
font-size: 28px;
color: var(--text-lo);
}
.annotation span {
padding: 8px 20px;
background: rgba(42, 67, 107, 0.3);
border-radius: 8px;
border: 1px solid var(--line);
}
/* 时间对比 */
.time-compare {
display: flex;
align-items: center;
gap: 60px;
}
.time-value {
font-size: 120px;
font-weight: bold;
color: var(--gold);
font-family: "DIN Alternate", "Helvetica Neue", sans-serif;
text-shadow: 0 4px 20px rgba(212, 164, 55, 0.6);
}
.time-label {
font-size: 36px;
color: var(--text-lo);
margin-top: 12px;
}
.arrow-large {
font-size: 72px;
color: var(--gold);
}
</style>
</head>
<body data-composition-id="s5-ppt" data-width="1920" data-height="1080">
<!-- Track 1: 输入框 (06s) -->
<div class="clip input-box"
data-start="0"
data-duration="6"
data-track-index="1"
style="top: 30%; left: 50%; transform: translate(-50%, -50%) translateY(24px); opacity: 0;">
输入主题:政法工作年度总结汇报
</div>
<!-- Track 1: 生成按钮 (16s) -->
<div class="clip generate-btn"
data-start="1"
data-duration="5"
data-track-index="1"
style="top: 30%; left: 50%; transform: translate(280px, -50%) scale(0.9); opacity: 0;">
生成
</div>
<!-- Track 1: PPT 卡片网格 (36s) -->
<div class="clip ppt-grid"
data-start="3"
data-duration="3"
data-track-index="1"
style="top: 55%; left: 50%; transform: translate(-50%, -50%); opacity: 0;">
<div class="ppt-card">
<div class="ppt-card-content">封面页</div>
</div>
<div class="ppt-card">
<div class="ppt-card-content">工作概述</div>
</div>
<div class="ppt-card">
<div class="ppt-card-content">重点成果</div>
</div>
<div class="ppt-card">
<div class="ppt-card-content">数据分析</div>
</div>
<div class="ppt-card">
<div class="ppt-card-content">经验总结</div>
</div>
<div class="ppt-card">
<div class="ppt-card-content">未来展望</div>
</div>
</div>
<!-- Track 2: 标注 (610s) -->
<div class="clip annotation"
data-start="6"
data-duration="4"
data-track-index="2"
style="top: 22%; left: 50%; transform: translate(-50%, -50%); opacity: 0;">
<span>16:9 / 4:3</span>
<span>原生可编辑</span>
<span>全程本地</span>
</div>
<!-- Track 1: 时间对比 (810s) -->
<div class="clip time-compare"
data-start="8"
data-duration="2"
data-track-index="1"
style="top: 60%; left: 50%; transform: translate(-50%, -50%); opacity: 0;">
<div style="text-align: center;">
<div class="time-value" data-count="7">0</div>
<div class="time-label"></div>
</div>
<div class="arrow-large"></div>
<div style="text-align: center;">
<div class="time-value" data-count="5">0</div>
<div class="time-label">分钟</div>
</div>
</div>
<script>
window.__timelines = window.__timelines || {};
const tl = gsap.timeline({ paused: true });
window.__timelines["s5-ppt"] = tl;
// 输入框
tl.to('[data-start="0"]', {
y: 0,
opacity: 1,
duration: 0.6,
ease: "power2.out"
}, 0);
// 生成按钮
tl.to('[data-start="1"]', {
scale: 1,
opacity: 1,
duration: 0.5,
ease: "back.out(1.5)"
}, 1);
// PPT 卡片网格(stagger
tl.to('[data-start="3"] .ppt-card', {
opacity: 1,
rotateY: 0,
duration: 0.6,
stagger: 0.12,
ease: "back.out(1.2)"
}, 3);
// 标注
tl.to('[data-start="6"]', {
opacity: 1,
duration: 0.5,
ease: "power2.out"
}, 6);
// 时间对比容器
tl.to('[data-start="8"]', {
opacity: 1,
duration: 0.5,
ease: "power2.out"
}, 8);
// 数字 count-up(确定性动画)
tl.to('[data-count="7"]', {
innerText: 7,
duration: 1,
snap: { innerText: 1 },
ease: "power2.out"
}, 8.2);
tl.to('[data-count="5"]', {
innerText: 5,
duration: 1,
snap: { innerText: 1 },
ease: "power2.out"
}, 8.2);
</script>
</body>
</html>