Web页面切换深色模式的实现原理

  要实现页面切换深色模式并记住用户使用的模式,可以结合使用 JavaScript 和本地存储(LocalStorage 或 Cookies)。以下是一个简单的示例:

  HTML 页面结构:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Dark Mode Example</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>

<div id="content">
  <h1>Hello, Dark Mode!</h1>
  <p>This is some content on the page.</p>
  <button onclick="toggleDarkMode()">Toggle Dark Mode</button>
</div>

<script src="darkmode.js"></script>
</body>
</html>

  CSS 文件(styles.css):

/* 默认的浅色模式样式 */
body {
  background-color: #f8f9fa;
  color: #343a40;
}

/* 深色模式下的样式 */
body.dark-mode {
  background-color: #343a40;
  color: #f8f9fa;
}

  JavaScript 文件(darkmode.js):

// 检查用户是否已启用深色模式
function isDarkModePreferred() {
  return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
}

// 切换深色模式
function toggleDarkMode() {
  var body = document.body;
  body.classList.toggle('dark-mode', !body.classList.contains('dark-mode'));

  // 存储用户的主题偏好
  var userPrefersDarkMode = body.classList.contains('dark-mode');
  localStorage.setItem('dark-mode-preference', userPrefersDarkMode);
}

// 页面加载时初始化
document.addEventListener('DOMContentLoaded', function() {
  // 从本地存储中获取用户的主题偏好
  var userPrefersDarkMode = localStorage.getItem('dark-mode-preference');

  // 如果用户有存储的偏好,应用之
  if (userPrefersDarkMode !== null) {
    document.body.classList.toggle('dark-mode', userPrefersDarkMode === 'true');
  } else {
    // 否则,根据系统主题偏好切换
    toggleDarkMode();
  }
});

// 监听系统主题变化,动态切换深色模式
window.matchMedia('(prefers-color-scheme: dark)').addListener(function(event) {
  // 仅当用户没有存储偏好时才切换
  if (localStorage.getItem('dark-mode-preference') === null) {
    toggleDarkMode();
  }
});

  darkmode.js 文件包含了用于切换深色模式的 JavaScript 代码。当页面加载时,它首先尝试从本地存储中获取用户的主题偏好,并根据用户的存储偏好或系统主题偏好切换样式。用户可以通过按钮手动切换深色模式,并存储用户的偏好到本地存储中。

本站原创内容,转载请注明来源:https://www.liutonghui.com/174

PHP封装数据库操作Model类示例
上一篇 2019-06-12
心墙
下一篇 2019-08-03

评论列表(1条)

发表评论

captcha

相关推荐

  • PHP生成HTML静态页原理

      在PHP中生成HTML文件静态页,在后续的访问可以直接加载静态文件而无需再次执行PHP脚本。这可以提高网站性能,减轻服务器负担,并改善页面加载速度。   用一个简单的小项目来说明PHP生成HTML静态页原理,包含:模板分离、自动创建目录、生成静态页、更新静态页、删除静态页、生成列表页+详情页、防重复生成、错误提示等功能。   项目结构 / ├── template/ # 模板文件夹 │ ├── index.h......

    2014-02-17
    15990
  • PHP利用正则表达式提取内容中图片的函数

      用PHP开发产品中经常需要从某部分内容中提取出图片,比如在一个表单中,我们需要从内容中提取出图片的路径当作缩略图,这时就可以用正则表达式的规则匹配的方法来提取出图片路径,利用下面这个函数来完成。 &lt;?php function getImgs($content,$order='ALL'){ $pattern="//"; preg_match_all($pattern,$content,$match); ......

    2015-01-07
    23810
  • 如果说一句真实的话会得罪一些人

      如果说一句真实的话会得罪一些人   如果做一件真实的事会遭致一些批评   如果做一个真实的自己会换来奇异的眼光   我无悔无憾......

    2016-06-19
    12440
  • 难得的宁静

      日子总是过得匆匆忙忙,难得有一刻能静下心来放空自己。每天穿梭在热闹的街巷,人流繁杂之所,看惯了熙熙攘攘,反倒更加向往一处安静宁和的归处。   找一处僻静的郊野园林,远离主城区的喧嚣纷扰,和外界的浮躁隔离开来。这里没有络绎不绝的人群,没有虚伪和狡诈,没有是是非非,四下里安安静静,只有风吹树叶和河水流动的声音,伴着草木自然的气息缓缓漫开。   脚下是青草连片铺展,面前是树木错落而立。在这里,不必追赶行程,不用刻意打卡,随心走走停停。微风......

    2016-06-28
    20620
  • 鱼缸氧泵过滤器不工作的解决方法

      本人养了四条黑玛丽、四条红箭、两条金十字共十条热带鱼,前段时间刚换了个新的水族箱,一天下班回来之后发现氧泵不好使了,插电之后没有任何反应,因为水位高过氧泵,不可能是烧坏了,于是准备拆开研究一下,如图所示,把氧泵卸来,拔掉下面抽水的管,稍用力掰开图一所示的位置。 (图一)   图二所示,可以看到抽水的螺旋桨,考虑到可能是这里面卡住了埋汰的东西导致电机无法带动起来,把螺旋桨对着水龙头边冲洗边转动一会,然后从新安装后,插上电,立即......

    2017-04-22
    31880
  • PHP框架的实现原理

      PHP框架的实现原理是通过采用MVC模式、路由机制、依赖注入、模板引擎和数据库操作等技术,构建一个结构清晰、易于维护和扩展的应用程序框架。下面是一个简单的PHP框架示例,演示了基本的实现原理:   简单的PHP框架文件结构 /simple_framework |-- app | |-- controllers | | |-- HomeController.php | |-- models | | ......

    2017-10-04
    15492
  • 如此国足名单是要放弃12强赛吗

      8月12日,国足公布了最新一期备战12强赛的球员名单,在李铁观察的60人中选择了其中31个进入本次国家队名单,其中包括了郭田雨、朱辰杰、高准翼等近期表现好的年轻小将。   最新一期国足名单:   门将:刘殿座、颜骏凌、王大雷、董春雨   后卫:蒋光太、张琳芃、高准翼、于大宝、李磊、王刚、王燊超、李昂、朱辰杰   中场:张稀哲、池忠国、金敬道、徐新、吴曦、尹鸿博、王秋明、蒿俊闵   前锋:武磊、艾克森、阿兰、韦世豪、洛国富、张玉宁、......

    2021-08-14
    20180
  • 解决宝塔面板MySql服务占用过多CPU和内存

      最近一周的时间网站总是动不动就打不开,不是网站本身的问题,而是整个服务器都无法访问了,重启服务器之后恢复正常,但过一段时间又无法访问。   在宝塔面板中看到CPU和内存占用负载都到了100%,我这台服务器目前就放了一个博客,显然这样的高负载是不正常的。在防火墙中看到有人尝试以SSH登录服务器的拦截记录,还在想谁闲得没事攻击我这个人博客。然后开始做各种安全防护设置,修改SSH端口,禁止root登录,安装Fail2ban防护软件,更换I......

    2024-12-17
    7280