You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不使用jQuery的情况下用JavaScript为项目新增navy主题?

原生JavaScript实现多主题切换与管理

第一步:用CSS变量统一管理主题样式

先把主题相关的颜色、基础样式抽成CSS变量,切换主题时只需要替换根元素的类名,不用修改大量样式代码:

/* 默认浅色主题 */
:root {
  --bg-color: #ffffff;
  --text-color: #333333;
  --primary-color: #4285f4;
}

/* 深色主题 */
.dark {
  --bg-color: #121212;
  --text-color: #ffffff;
  --primary-color: #64b5f6;
}

/* 新增藏青色主题 */
.navy {
  --bg-color: #0a192f;
  --text-color: #e6f1ff;
  --primary-color: #64ffda;
}

/* 全局样式绑定变量 */
body {
  background-color: var(--bg-color);
  color: var(--text-color);
  transition: background-color 0.3s, color 0.3s;
}

.theme-btn {
  background-color: var(--primary-color);
  color: var(--bg-color);
  border: none;
  padding: 8px 16px;
  margin: 0 4px;
  cursor: pointer;
  border-radius: 4px;
}

第二步:添加主题切换的HTML控件

用按钮组作为切换入口(也可以用下拉选择器,逻辑一致):

<div class="theme-switch-group">
  <button class="theme-btn" data-theme="light">浅色主题</button>
  <button class="theme-btn" data-theme="dark">深色主题</button>
  <button class="theme-btn" data-theme="navy">藏青色主题</button>
</div>

第三步:JavaScript实现切换与持久化

// 获取所有主题切换按钮
const themeBtns = document.querySelectorAll('[data-theme]');
// 本地存储的键名,用于保存用户选择的主题
const THEME_STORAGE_KEY = 'user-selected-theme';

// 切换主题的核心函数
function switchTheme(themeName) {
  // 先移除所有主题类名,避免冲突
  document.documentElement.classList.remove('light', 'dark', 'navy');
  // 添加当前选中的主题类名
  document.documentElement.classList.add(themeName);
  // 把选择保存到本地存储,刷新页面后保持主题
  localStorage.setItem(THEME_STORAGE_KEY, themeName);
}

// 页面初始化时加载主题
function initTheme() {
  // 优先读取本地存储的主题,没有则用默认的light
  const savedTheme = localStorage.getItem(THEME_STORAGE_KEY) || 'light';
  switchTheme(savedTheme);
}

// 给每个按钮绑定点击事件
themeBtns.forEach(btn => {
  btn.addEventListener('click', () => {
    const targetTheme = btn.getAttribute('data-theme');
    switchTheme(targetTheme);
  });
});

// 页面加载完成后初始化主题
document.addEventListener('DOMContentLoaded', initTheme);

可选优化:匹配系统主题偏好

如果需要优先匹配用户的系统主题设置,可以修改初始化函数:

function initTheme() {
  const savedTheme = localStorage.getItem(THEME_STORAGE_KEY);
  if (!savedTheme) {
    // 检测系统是否设置了深色模式
    const prefersDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
    const defaultTheme = prefersDarkMode ? 'dark' : 'light';
    switchTheme(defaultTheme);
  } else {
    switchTheme(savedTheme);
  }
}

内容的提问来源于stack exchange,提问作者ali_he96

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:06:39