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.html

上一篇 2019-06-12
下一篇 2019-08-19

评论列表(2条)

发表评论

captcha

相关推荐

  • 再谈PHP错误与异常处理

      请一定要注意,没有特殊说明:本例 PHP Version &lt; 7   说起PHP异常处理,大家首先会想到try-catch,那好,我们先看一段程序吧:有一个test.php文件,有一段简单的PHP程序,内容如下,然后命令行执行:php test.php &lt;?php $num = 0; try { echo 1/$num; } catch (Exception $e){ ......

    2017-06-12
    13780
  • jQuery Ajax实现批量删除数据

      在 jQuery 中使用 Ajax 实现批量删除的基本思路如下:   在前端,使用 jQuery 监听&ldquo;批量删除&rdquo;按钮的点击事件,收集用户选择的要删除的项目的标识(例如,ID)。   使用 Ajax 发送异步请求到后端,将要删除的项目标识传递给服务器。   在后端,接收到请求后,根据接收到的项目标识进行删除操作,并返回相应的结果给前端。   以下是一个简单的示例代码:   HTML &lt;!DOCTYPE ......

    2015-06-15
    17040
  • 日乒一姐石川佳纯退役

      石川佳纯于5月18日在东京举行了退役发布会,结束了她23年的乒乓球运动生涯。在发布会上,她还用中文向中国球迷表达了感谢,表示在中国比赛时有主场感觉,并感激中国球迷一直以来的支持。石川佳纯是日本著名乒乓球运动员,1993年2月23日出生于日本山口县,7岁开始打球,13岁被称为天才少女,在她最美好的青春年华,驰骋在乒乓球赛场上,为梦想付出行动。   作为日本女子乒坛的领军人物,石川佳纯以清纯的面容和高超的球技闻名于乒乓球界,在日本国内......

    2023-05-18
    7770
  • HTML中CSS和JS链接中的版本号

      在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、js等,而不必从你的服务器读取,这样在一定程度上加快了网站的打开速度,又可以节约一下你的服务器流量。   现在问题来了,.htaccess设置的css、js缓存都有一个过期时间,如果在访客的浏览器中已经缓存了......

    2013-10-10
    19340
  • PHP封装数据库操作Model类示例

      数据库操作是产品开发中最常见的需求,封装一个PHP数据库操作Model类可以减少反复的写大量SQL语句,下面就为大家分享一个数据库操作Model类。 &lt;?php //引入配置文件 include "./config.php"; class Model { public $link;//存储连接对象 public $tableName = "";//存储表名 public $field =......

    2019-06-12
    15464
  • 表格单元格内容超出时显示省略号效果

      在前端开发中,经常会遇到需要限制单元格宽度并且内容超出部分显示省略号的的情况。下面就简单的介绍下如何达到这种效果。   准备知识   1. 控制文本不换行   white-space: nowrap;   2. 超出长度时,出现省略号   overflow:hidden;   text-overflow:ellipsis   3. 修改表格布局算法   table-layout:fixed;table-layout的默认值为auto......

    2016-03-02
    16070
  • 织梦DedeCMS收费5800元,大批建站公司将受影响

      9月26日,一则消息在网站建站行业炸开锅:国内知名开源建站程序织梦内容管理系统(DedeCMS)官方宣布,使用其旗下产品DedeCMS的除个人非盈利用户外,全部需要购买商业授权。也就是说织梦要强制收费了。   作为国内最早也是使用率最高的CMS之一,DedeCMS是许多站长入行之初的启蒙者,在那个个人站长的红利期,很多站长最初都是选择了织梦作为自己网站的程序。这是因为DedeCMS简单易用,功能强大,并且开源免费,一度占有非常......

    2021-09-27
    16474
  • 王杰出道35周年出新歌,60岁浪子仍洒脱

      12月17日,消失在歌迷视线中多年的老牌创作型歌手王杰突然发布了一首新歌《一场游戏一场梦(结束篇)》,今年是2022年,正好是王杰出道35年整。1987年12月19日,王杰在台湾发行首张专辑《一场游戏一场梦》正式出道,这张专辑一经发行就轰动了整个华语乐坛,在中国台湾、中国香港、中国大陆、东南亚等地都创下了惊人的销量,专辑中的同名主打歌《一场游戏一场梦》、《安妮》等歌曲直到今天依然是KTV点唱率非常高的歌曲。 点击上方播放视......

    2022-12-24
    8160