Files
dinner.tootaio.com/20251012/commitee-list/commitee.js
xiaomai eb4ca98763 feat(presentation): add multi-page event presentation with navigation
This commit introduces a complete multi-page presentation system for the 20251012 event.

Key features include:
- **Page Structure:** Establishes the page flow with an entry point, a main cover scene, a committee list, and
individual speech video pages.
- **Real-time Chroma Key:** Implements a canvas-based green screen effect to composite a video onto a background image.
A control panel allows for real-time adjustment of keying parameters, position, and scale.
- **Unified Navigation:** A new `nav.js` script enables seamless navigation between pages using keyboard (arrow keys,
Enter), touch swipes, and on-screen buttons. The navigation logic follows a predefined sequence (entry -> main ->
committee -> speeches).
- **Dynamic Content:** The committee list page dynamically generates its content from a JavaScript data source.
2025-10-13 08:00:15 +08:00

87 lines
2.4 KiB
JavaScript

// 🎯 筹委会主要名单(简体)
const committeeData = [
{
role: "主席",
name: "黄祖全(小龙)",
subRole: "副主席",
subName: "周秉聪",
},
{ role: "总务", name: "江德景", subRole: "副总务", subName: "林泓明" },
{ role: "文书", name: "苏俊文", subRole: "副文书", subName: "谢进勇" },
{ role: "财政", name: "陈祖平", subRole: "副财政", subName: "郑礼靖" },
{ role: "查账", name: "黄杨顺" },
{ role: "交通", name: "胡千鸿", subRole: "副交通", subName: "颜楷庆" },
{ role: "交际", name: "黄伟汉", subRole: "副交际", subName: "陈俊宇" },
];
// 🎯 工委名单
const members = [
"蓝皓贤",
"黄寿琪",
"赵汶德",
"Dinesh",
"李善业",
"郑杰瑞",
"颜俊宇",
"黄靖杰",
"潘俊轩",
"张祥明",
"黄升文",
"陈照明",
"赵汶德",
"陈世勇",
"王畯杰",
"黄伟宏",
"杜恩浩",
"林育森",
"陈仲旺",
"刘伟杰",
"刘伟鸿",
"林鸿旺",
];
const body = document.getElementById("committeeBody");
const membersGrid = document.getElementById("committeeMembers");
// 🧩 动态生成主要职位(四列)
committeeData.forEach((item) => {
// 正职
const roleEl = document.createElement("div");
roleEl.className = "text-yellow-300 font-semibold text-right pr-2";
roleEl.textContent = item.role;
body.appendChild(roleEl);
const nameEl = document.createElement("div");
nameEl.className = "text-left";
nameEl.textContent = item.name;
body.appendChild(nameEl);
// 副职(若存在)
if (item.subRole && item.subName) {
const subRoleEl = document.createElement("div");
subRoleEl.className = "text-yellow-300 font-semibold text-right pr-2";
subRoleEl.textContent = item.subRole;
body.appendChild(subRoleEl);
const subNameEl = document.createElement("div");
subNameEl.className = "text-left";
subNameEl.textContent = item.subName;
body.appendChild(subNameEl);
} else {
// 没有副职则补空格,保持四列对齐
const empty1 = document.createElement("div");
empty1.textContent = "";
const empty2 = document.createElement("div");
empty2.textContent = "";
body.appendChild(empty1);
body.appendChild(empty2);
}
});
// 🧩 工委名单生成(六列)
members.forEach((name) => {
const div = document.createElement("div");
div.textContent = name;
membersGrid.appendChild(div);
});