当前位置:首页 > JavaScript

js 实现更换主题

2026-04-07 14:55:52JavaScript

使用 CSS 变量实现主题切换

通过 CSS 变量定义主题颜色,JavaScript 动态修改变量值实现切换。

: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');
}

通过类名切换主题

定义不同主题的样式类,JavaScript 切换类名。

js 实现更换主题

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

.dark-theme {
  background-color: black;
  color: white;
}
function setTheme(themeName) {
  document.body.className = themeName;
}

使用 localStorage 保存主题偏好

结合 localStorage 实现主题记忆功能。

js 实现更换主题

function saveThemePreference(theme) {
  localStorage.setItem('theme', theme);
}

function loadThemePreference() {
  const savedTheme = localStorage.getItem('theme');
  if (savedTheme) {
    setTheme(savedTheme);
  }
}

// 页面加载时调用
loadThemePreference();

完整实现示例

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

function applyTheme(theme) {
  document.body.className = theme;
  localStorage.setItem('theme', theme);
}

function toggleTheme() {
  const currentTheme = localStorage.getItem('theme');
  const newTheme = currentTheme === 'dark-theme' ? 'light-theme' : 'dark-theme';
  applyTheme(newTheme);
}

// 初始化主题
const savedTheme = localStorage.getItem('theme') || 
                  (prefersDarkScheme.matches ? 'dark-theme' : 'light-theme');
applyTheme(savedTheme);

// 添加事件监听
themeToggle.addEventListener('click', toggleTheme);

响应系统偏好

自动检测用户系统主题偏好。

const colorSchemeQuery = window.matchMedia('(prefers-color-scheme: dark)');

function handleColorSchemeChange(e) {
  const newTheme = e.matches ? 'dark-theme' : 'light-theme';
  applyTheme(newTheme);
}

colorSchemeQuery.addListener(handleColorSchemeChange);

使用 CSS 媒体查询

通过 prefers-color-scheme 媒体查询实现系统级主题适配。

@media (prefers-color-scheme: dark) {
  :root {
    --primary-color: #9b59b6;
    --background-color: #2c3e50;
    --text-color: #ecf0f1;
  }
}

这些方法可以根据项目需求单独或组合使用,实现灵活的主题切换功能。

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

相关文章

js实现复制到剪贴板

js实现复制到剪贴板

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

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实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…