当前位置:首页 > JavaScript

js 实现更换主题

2026-03-15 21:31:52JavaScript

使用 CSS 变量实现主题切换

通过定义 CSS 变量并在 JavaScript 中动态修改这些变量,可以实现主题切换功能。CSS 变量通常定义在 :root 选择器中,以便全局访问。

:root {
  --primary-color: #3498db;
  --background-color: #ffffff;
  --text-color: #333333;
}

.dark-theme {
  --primary-color: #9b59b6;
  --background-color: #2c3e50;
  --text-color: #ecf0f1;
}
function toggleTheme() {
  document.body.classList.toggle('dark-theme');
  const theme = document.body.classList.contains('dark-theme') ? 'dark' : 'light';
  localStorage.setItem('theme', theme);
}

// 初始化时检查本地存储的主题偏好
const savedTheme = localStorage.getItem('theme');
if (savedTheme === 'dark') {
  document.body.classList.add('dark-theme');
}

通过切换类名实现主题

定义不同主题的 CSS 类,然后通过 JavaScript 切换这些类来实现主题变化。

.light-theme {
  background-color: white;
  color: black;
}

.dark-theme {
  background-color: #222;
  color: white;
}
const themeToggle = document.getElementById('theme-toggle');
themeToggle.addEventListener('click', () => {
  document.body.classList.toggle('dark-theme');
  document.body.classList.toggle('light-theme');
});

使用媒体查询同步系统主题

结合 prefers-color-scheme 媒体查询和 JavaScript,可以实现与系统主题同步的功能。

// 检测系统主题偏好
const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;

// 设置初始主题
if (systemPrefersDark) {
  document.body.classList.add('dark-theme');
}

// 监听系统主题变化
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => {
  if (e.matches) {
    document.body.classList.add('dark-theme');
  } else {
    document.body.classList.remove('dark-theme');
  }
});

使用第三方库实现主题切换

对于更复杂的主题需求,可以考虑使用专门的库如 theme-switcherdarkmode.js

// 使用 darkmode.js 的示例
const options = {
  bottom: '64px',
  right: '32px',
  time: '0.5s',
  mixColor: '#fff',
  backgroundColor: '#fff',
  buttonColorDark: '#100f2c',
  buttonColorLight: '#fff',
  saveInCookies: true,
  label: '🌓'
};

const darkmode = new Darkmode(options);
darkmode.showWidget();

主题切换的最佳实践

持久化用户选择:将用户选择的主题保存在 localStorage 或 cookie 中,以便下次访问时保持一致性。

添加过渡效果:为主题切换添加 CSS 过渡效果,使变化更平滑。

body {
  transition: background-color 0.3s ease, color 0.3s ease;
}

无障碍考虑:确保主题切换不会影响内容的可读性,并为切换按钮添加适当的 ARIA 标签。

js 实现更换主题

<button id="theme-toggle" aria-label="Toggle dark mode">Toggle Theme</button>

标签: 主题js
分享给朋友:

相关文章

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现pdf在线预览

js实现pdf在线预览

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

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…