当前位置:首页 > 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,可以实现与系统主题同步的功能。

js 实现更换主题

// 检测系统主题偏好
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 中,以便下次访问时保持一致性。

js 实现更换主题

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

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

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

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

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

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…