【代码】分享一个网页代码,根据时间自动切换开关灯效果

效果预览:

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>
【版权声明】:服务器导航网所有内容均来自网络和部分原创,若无意侵犯到您的权利,请及时与联系 QQ 2232175042,将在48小时内删除相关内容!!

给TA服务器
共{{data.count}}人
人已服务器
技术教程

2025自媒体实战营,Deepseek、即梦 AI、Midjourney系统教程及案例实操

2025-5-4 6:34:46

技术教程

云手机群控系统源码 自动化管理系统 附视频教程

2025-7-6 4:16:45

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索