/*! * OSGKeyboard 主页交互。 * 无 JavaScript 时页面内容完整可读;本文件负责: * 1. 中 / 英双语切换(data-zh / data-en 系列属性,含视频源) * 2. 深浅色主题(默认跟随系统,手动选择后持久化) * 3. 移动端导航开合 * 4. 导航栏滚动状态、滚动显现动效、离屏视频暂停 */ (function () { "use strict"; const root = document.documentElement; const siteNav = document.getElementById("siteNav"); const languageButton = document.getElementById("languageToggle"); const themeButton = document.getElementById("themeToggle"); const themeIconUse = document.getElementById("themeIconUse"); const menuButton = document.getElementById("menuToggle"); const menuIconUse = document.getElementById("menuIconUse"); const mobileNav = document.getElementById("mobileNav"); const themeColor = document.querySelector('meta[name="theme-color"]'); const themeMedia = window.matchMedia("(prefers-color-scheme: dark)"); const supportedLanguages = new Set(["zh", "en"]); /* ---------------- 语言 ---------------- */ function preferredLanguage() { const query = new URLSearchParams(window.location.search).get("lang"); if (supportedLanguages.has(query)) return query; const saved = localStorage.getItem("osg-site-language"); if (supportedLanguages.has(saved)) return saved; return navigator.language.toLowerCase().startsWith("zh") ? "zh" : "en"; } function applyLanguage(language, persist) { const lang = supportedLanguages.has(language) ? language : "zh"; root.lang = lang === "zh" ? "zh-Hans" : "en"; root.dataset.lang = lang; document.querySelectorAll("[data-zh][data-en]").forEach((element) => { element.textContent = element.dataset[lang] || ""; }); document.querySelectorAll("[data-zh-html][data-en-html]").forEach((element) => { element.innerHTML = element.dataset[`${lang}Html`] || ""; }); document.querySelectorAll("[data-zh-alt][data-en-alt]").forEach((element) => { element.alt = element.dataset[`${lang}Alt`] || ""; }); // 同时覆盖 与