当前位置:首页 > JavaScript

js实现关灯

2026-03-14 08:10:12JavaScript

使用CSS滤镜实现页面变暗效果

通过JavaScript动态添加CSS滤镜类实现"关灯"效果。创建一个全屏遮罩层,降低亮度并叠加深色背景:

function toggleDarkMode() {
  document.body.classList.toggle('dark-mode');
}

// 对应CSS
.dark-mode {
  filter: brightness(0.4);
  background-color: #111;
  transition: all 0.3s ease;
}

通过Canvas覆盖实现暗化效果

使用Canvas绘制半透明黑色层覆盖整个页面:

const canvas = document.createElement('canvas');
canvas.style.position = 'fixed';
canvas.style.top = '0';
canvas.style.left = '0';
canvas.style.zIndex = '9999';
canvas.style.pointerEvents = 'none';

function toggleLights() {
  if (canvas.style.display === 'none') {
    canvas.style.display = 'block';
    resizeCanvas();
    drawOverlay();
  } else {
    canvas.style.display = 'none';
  }
}

function resizeCanvas() {
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;
}

function drawOverlay() {
  const ctx = canvas.getContext('2d');
  ctx.fillStyle = 'rgba(0, 0, 0, 0.7)';
  ctx.fillRect(0, 0, canvas.width, canvas.height);
}

使用SVG滤镜实现高级暗化

创建SVG滤镜实现更复杂的颜色变换:

const svgFilter = `
  <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
    <filter id="darken">
      <feColorMatrix type="matrix"
        values="0.3 0 0 0 0
                0 0.3 0 0 0
                0 0 0.3 0 0
                0 0 0 1 0"/>
    </filter>
  </svg>
`;

function applyDarkFilter() {
  const style = document.createElement('style');
  style.innerHTML = 'body { filter: url(#darken); }';
  document.head.appendChild(style);
  document.body.insertAdjacentHTML('afterbegin', svgFilter);
}

纯CSS变量切换方案

利用CSS变量实现主题切换:

document.documentElement.style.setProperty('--main-bg-color', '#222');
document.documentElement.style.setProperty('--text-color', '#eee');
document.documentElement.style.setProperty('--brightness', '0.6');

// 对应CSS
:root {
  --main-bg-color: #fff;
  --text-color: #333;
  --brightness: 1;
}

body {
  background-color: var(--main-bg-color);
  color: var(--text-color);
  filter: brightness(var(--brightness));
  transition: all 0.3s ease;
}

保存用户偏好到本地存储

结合localStorage保存用户选择的主题:

js实现关灯

function toggleDarkTheme() {
  const isDark = document.body.classList.toggle('dark-theme');
  localStorage.setItem('darkTheme', isDark);
}

// 页面加载时检查
if (localStorage.getItem('darkTheme') === 'true') {
  document.body.classList.add('dark-theme');
}

以上方法可根据具体需求选择使用,CSS滤镜方案性能最佳,Canvas方案最灵活,SVG滤镜适合需要精细控制的情况,CSS变量方案便于维护和扩展。

标签: js
分享给朋友:

相关文章

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…

实现继承js

实现继承js

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