当前位置:首页 > JavaScript

js实现换肤

2026-01-13 14:07:52JavaScript

使用CSS变量实现换肤

通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。

:root {
  --primary-color: #3498db;
  --secondary-color: #2ecc71;
  --text-color: #333;
}

.dark-theme {
  --primary-color: #2980b9;
  --secondary-color: #27ae60;
  --text-color: #fff;
}

JavaScript切换主题代码:

function toggleTheme() {
  document.body.classList.toggle('dark-theme');
}

使用类名切换实现换肤

通过为不同主题创建对应的CSS类,切换body元素的类名来改变主题。

.light-theme {
  background: #fff;
  color: #333;
}

.dark-theme {
  background: #222;
  color: #fff;
}

JavaScript切换代码:

function setTheme(themeName) {
  document.body.className = themeName;
}

使用localStorage持久化主题

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

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

// 页面加载时检查保存的主题
window.addEventListener('DOMContentLoaded', () => {
  const savedTheme = localStorage.getItem('theme') || 'light-theme';
  document.body.className = savedTheme;
});

动态加载CSS文件实现换肤

对于大型项目,可以为不同主题创建单独的CSS文件,动态加载所需样式表。

function loadTheme(themeName) {
  const link = document.createElement('link');
  link.rel = 'stylesheet';
  link.href = `themes/${themeName}.css`;
  document.head.appendChild(link);

  // 移除旧主题
  const oldTheme = document.querySelector('link[data-theme]');
  if(oldTheme) oldTheme.remove();

  link.setAttribute('data-theme', themeName);
}

使用CSS预处理器变量

如果项目使用Sass/Less等预处理器,可以生成多套主题CSS文件。

Sass示例:

$themes: (
  light: (
    bg: #fff,
    text: #333
  ),
  dark: (
    bg: #222,
    text: #fff
  )
);

@mixin theme() {
  @each $theme, $map in $themes {
    .#{$theme}-theme {
      $theme-map: () !global;
      @each $key, $submap in $map {
        $value: map-get($map, $key);
        $theme-map: map-merge($theme-map, ($key: $value)) !global;
      }
      @content;
      $theme-map: null !global;
    }
  }
}

@function themed($key) {
  @return map-get($theme-map, $key);
}

js实现换肤

标签: 换肤js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

vue 实现换肤

vue 实现换肤

实现全局主题切换 在Vue项目中实现换肤功能,可以通过CSS变量结合状态管理来实现全局主题切换。定义不同主题的CSS变量,通过动态修改这些变量来改变整体样式。 /* 定义默认主题变量 */ :roo…

js实现防洪

js实现防洪

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

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…