当前位置:首页 > JavaScript

js夜间实现

2026-03-13 21:21:06JavaScript

夜间模式的实现方法

在JavaScript中实现夜间模式通常涉及切换CSS样式或类名,以下是几种常见方法:

使用CSS变量切换主题

定义两套CSS变量分别对应日间和夜间模式,通过JavaScript切换body的类名或属性:

:root {
  --bg-color: #ffffff;
  --text-color: #333333;
}

[data-theme="dark"] {
  --bg-color: #1a1a1a;
  --text-color: #f0f0f0;
}

body {
  background-color: var(--bg-color);
  color: var(--text-color);
}
const toggleBtn = document.getElementById('theme-toggle');
toggleBtn.addEventListener('click', () => {
  document.body.dataset.theme = 
    document.body.dataset.theme === 'dark' ? 'light' : 'dark';
});

通过类名切换样式

定义两套样式类,通过切换类名实现:

.light-theme {
  background-color: #ffffff;
  color: #333333;
}

.dark-theme {
  background-color: #1a1a1a;
  color: #f0f0f0;
}
document.body.classList.toggle('dark-theme');

使用localStorage保存用户偏好

结合localStorage保存用户选择的主题,页面加载时自动应用:

// 切换并保存主题
function toggleTheme() {
  const isDark = document.body.classList.toggle('dark-theme');
  localStorage.setItem('darkMode', isDark);
}

// 页面加载时应用保存的主题
if (localStorage.getItem('darkMode') === 'true') {
  document.body.classList.add('dark-theme');
}

媒体查询与JavaScript结合

检测系统偏好设置并自动切换:

const prefersDark = window.matchMedia('(prefers-color-scheme: dark)');
if (prefersDark.matches) {
  document.body.classList.add('dark-theme');
}

prefersDark.addListener((e) => {
  document.body.classList.toggle('dark-theme', e.matches);
});

渐变过渡效果

为切换过程添加平滑动画:

body {
  transition: background-color 0.3s ease, color 0.3s ease;
}

完整示例代码

以下是一个完整的实现示例:

js夜间实现

<button id="theme-toggle">切换夜间模式</button>

<script>
  const toggleBtn = document.getElementById('theme-toggle');

  function applyTheme(isDark) {
    document.body.style.backgroundColor = isDark ? '#1a1a1a' : '#ffffff';
    document.body.style.color = isDark ? '#f0f0f0' : '#333333';
  }

  toggleBtn.addEventListener('click', () => {
    const isDark = document.body.style.backgroundColor !== 'rgb(255, 255, 255)';
    applyTheme(!isDark);
    localStorage.setItem('darkMode', !isDark);
  });

  // 初始化
  applyTheme(localStorage.getItem('darkMode') === 'true');
</script>

注意事项

  • 颜色对比度需符合WCAG可访问性标准
  • 图标和图片可能需要准备两套资源
  • 表单控件样式需单独处理
  • 考虑使用CSS预处理器简化主题管理

以上方法可根据项目需求组合使用,推荐优先采用CSS变量方案,因其维护性和扩展性较好。

标签: 夜间js
分享给朋友:

相关文章

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…