当前位置:首页 > 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防抖和节流实现

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

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…