当前位置:首页 > 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.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现图

js实现图

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

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…