当前位置:首页 > JavaScript

js 实现更换主题

2026-02-02 21:09:46JavaScript

实现主题切换的方法

使用 CSS 变量和 JavaScript 切换类名

定义不同主题的 CSS 变量,通过 JavaScript 切换 body 或根元素的类名来改变主题。

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

.dark-theme {
  --primary-color: #2980b9;
  --background-color: #2c3e50;
}
function toggleTheme() {
  document.body.classList.toggle('dark-theme');
}

通过修改 link 标签动态加载不同样式表

创建多个主题的 CSS 文件,通过 JavaScript 动态切换 link 标签的 href 属性。

function setTheme(themeName) {
  const link = document.getElementById('theme-style');
  link.href = `${themeName}.css`;
}

使用 localStorage 保存用户主题偏好

结合 localStorage 保存用户选择的主题,下次访问时自动加载。

function setTheme(themeName) {
  localStorage.setItem('theme', themeName);
  document.documentElement.className = themeName;
}

function loadTheme() {
  const theme = localStorage.getItem('theme') || 'light-theme';
  setTheme(theme);
}

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

完整的主题切换组件实现

创建一个完整的主题切换按钮组件,包含状态管理和样式切换。

<button id="theme-toggle">切换主题</button>
const themeToggle = document.getElementById('theme-toggle');
const currentTheme = localStorage.getItem('theme') || 'light';

document.documentElement.classList.add(currentTheme);

themeToggle.addEventListener('click', () => {
  const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
  document.documentElement.classList.remove(currentTheme);
  document.documentElement.classList.add(newTheme);
  localStorage.setItem('theme', newTheme);
  currentTheme = newTheme;
});

响应式主题切换

根据系统偏好自动切换主题,同时允许用户手动覆盖。

js 实现更换主题

const prefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const currentTheme = localStorage.getItem('theme');

if (currentTheme) {
  document.documentElement.classList.add(currentTheme);
} else if (prefersDark.matches) {
  document.documentElement.classList.add('dark-theme');
}

prefersDark.addListener((e) => {
  if (!localStorage.getItem('theme')) {
    document.documentElement.classList.toggle('dark-theme', e.matches);
  }
});

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

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

相关文章

js实现复制

js实现复制

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

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…