当前位置:首页 > 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 属性。

js 实现更换主题

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

使用 localStorage 保存用户主题偏好

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

js 实现更换主题

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

响应式主题切换

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

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实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback)…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现vr

js实现vr

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

js jquery

js jquery

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