【代码】分享一个网页代码,根据时间自动切换开关灯效果
效果预览:
https://img.ximi.me/
原理:
根据当前时间判断白天黑夜,白天开灯,晚上关灯
调用方法:
可参考预览页面,【F12】获取
附上 CSS 与 JS 代码
CSS:
/* --- CSS 变量定义:默认是浅色模式 --- */:root { /* 浅色模式变量 */ --body-bg: #88d3e8; --body-color: #37474f; /* 主体文字颜色 */ --nv-title-bg: #f8f5ffd6; --nv-title-link-color: #5f5f5f; --nv-title-a-hover: #fefffe; --album-category-active-color: #1d1d1f; --lightbulb-bg: #e9e9e9; --footer-bg:#f8f5ffd6; --login-1-bg: #efefef; /* 新增:登录按钮背景色 */ --login-1-hover-color: #1d1d1f; /* 新增:登录按钮悬停文字颜色 */}/* 当 body 元素有 dark-mode-active 类时,覆盖上述变量为深色模式的值 */body.dark-mode-active { /* 深色模式变量 */ --body-bg: #3f4243; --body-color: #f9f9f9; /* 深色模式下主体文字颜色 */ --nv-title-bg: #191919; --nv-title-link-color: #ffffff; --nv-title-a-hover: #3ec270; --album-category-active-color: #ffffff; --lightbulb-bg: #736f6f; --footer-bg: #232425; --login-1-bg: #35363a; /* 深色模式:登录按钮背景色 */ --login-1-hover-color: #fff; /* 深色模式:登录按钮悬停文字颜色 */}body.dark-mode-active { background-color: #212121; color: #c9c9c9; background-blend-mode: overlay;}/* --- 应用 CSS 变量到你的样式中,并添加过渡效果 --- */body { font-family: sans-serif; margin: 0; min-height: 100vh; padding-bottom: 60px; box-sizing: border-box; /* 应用变量并添加过渡 */ /* background-color: var(--body-bg);*/ background-image: url(https://img.ximi.me/user/src/img.php?=1750729631_685a039f354f8.webp); background-size: cover; /* 让背景图片覆盖整个元素,可能会裁剪图片 */ background-position: center center; /* 可选:确保图片居中显示 */ background-repeat: no-repeat; /* 可选:防止图片重复 */background-attachment: fixed; color: var(--body-color); transition: background-color 0.3s ease, color 0.3s ease;}
CSS
JS:
<script> document.addEventListener(\'DOMContentLoaded\', () => { const modeToggleBtn = document.querySelector(\'.lightbulb\'); // 确保选择器正确 const body = document.body; const localStorageKey = \'themeMode\'; // 根据时间判断是否为夜晚(18:00 - 次日 6:00 视为夜晚) const isNightTime = () => { const now = new Date(); const hour = now.getHours(); return hour >= 18 || hour < 6; }; // 应用主题的函数 // isDark: true 为深色,false 为浅色 // source: 标记主题来源 (用于调试,可选参数) const applyTheme = (isDark, source = \'manual\') => { if (isDark) { body.classList.add(\'dark-mode-active\'); } else { body.classList.remove(\'dark-mode-active\'); } // 更新 localStorage 存储的用户偏好 localStorage.setItem(localStorageKey, isDark ? \'dark\' : \'light\'); // 调试输出:显示当前模式和来源 const now = new Date(); const hours = String(now.getHours()).padStart(2, \'0\'); const minutes = String(now.getMinutes()).padStart(2, \'0\'); const modeText = isDark ? \'深色模式\' : \'浅色模式\'; console.log(`[主题] ${hours}:${minutes} - 已切换到 ${modeText} (来源: ${source})`); }; // --- 页面加载时检查并应用主题逻辑 --- const now = new Date(); const hours = String(now.getHours()).padStart(2, \'0\'); const minutes = String(now.getMinutes()).padStart(2, \'0\'); if (isNightTime()) { applyTheme(true, \'自动判断 (夜晚)\'); console.log(`[首次加载] ${hours}:${minutes} - 根据时间判断为夜晚 (${now.getHours()}h),自动切换至深色模式。`); } else { applyTheme(false, \'自动判断 (白天)\'); console.log(`[首次加载] ${hours}:${minutes} - 根据时间判断为白天 (${now.getHours()}h),自动切换至浅色模式。`); } const savedTheme = localStorage.getItem(localStorageKey); if (savedTheme) { // 检查 localStorage 中是否有保存的偏好,如果有,覆盖时间设置 applyTheme(savedTheme === \'dark\', \'LocalStorage 偏好覆盖\'); console.log(`[加载] ${hours}:${minutes} - 检测到 LocalStorage 偏好 \"${savedTheme}\",覆盖时间设置。`); } // --- 为灯泡图标添加点击事件监听器 --- if (modeToggleBtn) { // 检查按钮是否存在,避免空指针错误 modeToggleBtn.addEventListener(\'click\', () => { // 获取当前实际应用的模式(而不是从 localStorage 读,因为 applyTheme 已经更新了 localStorage) const isCurrentlyDark = body.classList.contains(\'dark-mode-active\'); // 切换到相反的模式,并标记为手动切换 applyTheme(!isCurrentlyDark, \'手动切换\'); }); } else { console.error(\'错误:未找到主题切换按钮元素 (.lightbulb)。请检查 HTML 类名。\'); } // ... (确保这里包含所有其他您的 JS 代码,例如相册筛选和底部可见性逻辑) });</script>