当前位置:首页 > 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绘制半透明黑色层覆盖整个页面:

js实现关灯

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滤镜实现更复杂的颜色变换:

js实现关灯

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保存用户选择的主题:

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 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

链表实现js

链表实现js

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

js 实现页面刷新

js 实现页面刷新

使用 location.reload() location.reload() 是原生 JavaScript 提供的页面刷新方法。调用该方法会重新加载当前页面,相当于点击浏览器的刷新按钮。 // 基本…