当前位置:首页 > 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切换:

js夜间实现

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过渡效果使切换更平滑

    js夜间实现

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

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

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

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

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

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

相关文章

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let currentY…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…