当前位置:首页 > JavaScript

js实现暗黑模式

2026-03-15 21:16:29JavaScript

实现暗黑模式的核心方法

通过JavaScript实现暗黑模式主要涉及CSS变量切换、本地存储状态以及事件监听。以下是具体实现方案:

基础CSS变量定义

在全局CSS中定义两套颜色变量,分别对应亮色和暗色模式:

js实现暗黑模式

:root {
  --bg-color: #ffffff;
  --text-color: #333333;
  --primary-color: #2563eb;
}

[data-theme="dark"] {
  --bg-color: #1a1a1a;
  --text-color: #f5f5f5;
  --primary-color: #3b82f6;
}

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

切换主题的JavaScript逻辑

创建主题切换函数并处理本地存储:

const themeToggle = document.getElementById('theme-toggle');
const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)');

// 初始化主题
function initTheme() {
  const savedTheme = localStorage.getItem('theme');
  if (savedTheme) {
    document.documentElement.setAttribute('data-theme', savedTheme);
  } else if (prefersDarkScheme.matches) {
    document.documentElement.setAttribute('data-theme', 'dark');
  }
}

// 切换主题函数
function toggleTheme() {
  const currentTheme = document.documentElement.getAttribute('data-theme');
  const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
  document.documentElement.setAttribute('data-theme', newTheme);
  localStorage.setItem('theme', newTheme);
}

// 事件监听
themeToggle.addEventListener('click', toggleTheme);
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => {
  if (!localStorage.getItem('theme')) {
    document.documentElement.setAttribute('data-theme', e.matches ? 'dark' : 'light');
  }
});

// 初始化
initTheme();

完整HTML结构示例

<!DOCTYPE html>
<html lang="en" data-theme="light">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Dark Mode Demo</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <button id="theme-toggle">Toggle Dark Mode</button>
  <script src="theme.js"></script>
</body>
</html>

进阶优化方案

系统偏好同步 通过prefers-color-scheme媒体查询自动匹配用户系统主题偏好:

js实现暗黑模式

if (!localStorage.getItem('theme') && prefersDarkScheme.matches) {
  document.documentElement.setAttribute('data-theme', 'dark');
}

平滑过渡效果 在CSS中添加过渡属性使切换更自然:

:root {
  transition: all 0.3s ease-in-out;
}

图标同步切换 根据主题状态切换图标显示:

function updateIcon() {
  const icon = document.getElementById('theme-icon');
  const isDark = document.documentElement.getAttribute('data-theme') === 'dark';
  icon.textContent = isDark ? '🌙' : '☀️';
}

注意事项

  • 确保CSS变量覆盖所有需要变化的颜色属性
  • 清除本地存储时需重置为系统偏好
  • 过渡动画不宜过长以免影响用户体验
  • 重要操作按钮应保持足够的对比度

通过以上实现方案,可以构建一个完整的暗黑模式切换系统,支持手动切换、自动匹配系统偏好以及状态持久化。

标签: 模式js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…