当前位置:首页 > JavaScript

js夜间实现

2026-04-05 15:33:53JavaScript

夜间模式实现方法

在JavaScript中实现夜间模式(暗黑模式)通常涉及修改页面的CSS样式,切换颜色方案。以下是几种常见实现方式:

通过CSS类切换

定义两套CSS样式,通过切换类名实现夜间模式:

/* 默认样式 */
body {
  background-color: white;
  color: black;
}

/* 夜间模式样式 */
body.dark-mode {
  background-color: #121212;
  color: #e0e0e0;
}

JavaScript切换逻辑:

function toggleDarkMode() {
  document.body.classList.toggle('dark-mode');
  // 保存用户偏好到localStorage
  const isDark = document.body.classList.contains('dark-mode');
  localStorage.setItem('darkMode', isDark);
}

// 初始化时检查用户偏好
if (localStorage.getItem('darkMode') === 'true') {
  document.body.classList.add('dark-mode');
}

使用CSS变量

更灵活的解决方案是使用CSS变量:

:root {
  --bg-color: white;
  --text-color: black;
}

:root.dark-theme {
  --bg-color: #121212;
  --text-color: #e0e0e0;
}

body {
  background-color: var(--bg-color);
  color: var(--text-color);
  transition: all 0.3s ease;
}

JavaScript切换:

function toggleTheme() {
  const root = document.documentElement;
  root.classList.toggle('dark-theme');
  localStorage.setItem('theme', root.classList.contains('dark-theme') ? 'dark' : 'light');
}

// 初始化
const savedTheme = localStorage.getItem('theme');
if (savedTheme === 'dark') {
  document.documentElement.classList.add('dark-theme');
}

跟随系统偏好

现代浏览器支持检测用户系统颜色偏好:

// 检测系统偏好并监听变化
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)');

function setTheme(isDark) {
  if (isDark) {
    document.documentElement.classList.add('dark-theme');
  } else {
    document.documentElement.classList.remove('dark-theme');
  }
}

// 初始设置
setTheme(prefersDark.matches);

// 监听系统主题变化
prefersDark.addListener((e) => setTheme(e.matches));

完整实现示例

结合上述方法的完整实现:

class DarkMode {
  constructor() {
    this.themeToggle = document.getElementById('theme-toggle');
    this.init();
  }

  init() {
    // 优先使用localStorage,其次使用系统偏好
    const savedTheme = localStorage.getItem('theme');
    const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;

    const isDark = savedTheme ? savedTheme === 'dark' : prefersDark;
    this.setTheme(isDark);

    if (this.themeToggle) {
      this.themeToggle.checked = isDark;
      this.themeToggle.addEventListener('change', () => this.toggleTheme());
    }

    // 监听系统主题变化
    window.matchMedia('(prefers-color-scheme: dark)').addListener(e => {
      if (!localStorage.getItem('theme')) {
        this.setTheme(e.matches);
      }
    });
  }

  setTheme(isDark) {
    const root = document.documentElement;
    if (isDark) {
      root.classList.add('dark-theme');
    } else {
      root.classList.remove('dark-theme');
    }
  }

  toggleTheme() {
    const isDark = this.themeToggle.checked;
    this.setTheme(isDark);
    localStorage.setItem('theme', isDark ? 'dark' : 'light');
  }
}

// 初始化
new DarkMode();

注意事项

  1. 过渡动画:添加CSS过渡效果使切换更平滑

    * {
      transition: background-color 0.3s ease, color 0.3s ease;
    }
  2. 图标切换:可以使用SVG或字体图标根据主题切换不同图标

  3. 性能考虑:避免过渡动画影响过多元素,可能导致性能问题

  4. 可访问性:确保夜间模式下的颜色对比度仍符合WCAG标准

  5. 持久化:使用localStorage或cookie保存用户偏好

    js夜间实现

以上方法可根据具体需求组合使用,创建灵活且用户友好的夜间模式功能。

标签: 夜间js
分享给朋友:

相关文章

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…

js实现乘法

js实现乘法

实现乘法运算的方法 在JavaScript中实现乘法运算可以通过多种方式完成,以下列举几种常见方法: 基础运算符 直接使用乘法运算符*是最简单的方式: let result = 3 * 5; //…