全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

IP归属甄别会员请立即修改密码
12
返回列表 发新帖
打印 上一主题 下一主题

求JS大哥帮个忙【继续求助】

[复制链接]
11#
发表于 2021-11-12 15:42:02 | 只看该作者
切换模式记录到cookie?
12#
 楼主| 发表于 2021-11-12 15:45:49 | 只看该作者
屮喵 发表于 2021-11-12 15:42
切换模式记录到cookie?

是的  应该是这个原理吧
是不是很难
13#
发表于 2021-11-12 16:16:40 | 只看该作者
超级无敌小马甲 发表于 2021-11-12 14:27
感谢大哥帮忙。这个这个对我来说有点难,我用下楼那个实现了,那个我看得懂 哈哈
------------------
那 ...

我这种是大家常用的方案,Github、知乎 等大网站都是这样做的,你看一下他们的源代码就能发现~

当然,这种方案需要做好 CSS 样式才行,以确保可以正确覆盖常规的白天样式。

关于 Cookie 记住主题模式,我给你写了段和我前面配套的代码,既然你没有采用我的方案那就当参考一下吧:
  1. // 根据当前 Cookie 中的主题模式来设置网页主题模式
  2. setTheme(getTheme());

  3. // 获取 Cookie 中的主题模式
  4. function getTheme() {
  5.     let name = 'theme=',
  6.         ca = document.cookie.split(';');
  7.     for (let i=0; i<ca.length; i++) {
  8.         let c = ca[i].trim();
  9.         if (c.indexOf(name)==0) return c.substring(name.length,c.length);
  10.     }
  11.     // 如果不存在 theme 这个 Cookie 值,则返回为白天模式
  12.     return 'light';
  13. }

  14. // 修改 Cookie 中的主题模式
  15. function setTheme(theme) {
  16.     switch(theme) {
  17.         case 'light':
  18.             // 删除 theme 这个 Cookie,并移除 html 标签的相关属性
  19.             document.cookie='theme=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/';
  20.             document.lastElementChild.removeAttribute('data-theme');
  21.             break;
  22.         case 'dark':
  23.             // 写入 Cookie 并对 html 标签添加相关属性
  24.             document.cookie='theme=dark; expires=Thu, 18 Dec 2031 12:00:00 GMT; path=/';
  25.             document.lastElementChild.setAttribute('data-theme', 'dark');
  26.             break;
  27.     }
  28. }
复制代码
14#
发表于 2021-11-12 17:02:24 | 只看该作者
本帖最后由 518 于 2021-11-12 17:05 编辑

参照大佬@G.K.D 写的,改了一下
  1.     function getTheme() {
  2.         let name = 'theme=',
  3.             ca = document.cookie.split(';');
  4.         for (let i = 0; i < ca.length; i++) {
  5.             let c = ca[i].trim();
  6.             if (c.indexOf(name) === 0)
  7.                 return c.substring(name.length, c.length);
  8.         }
  9.         return 'light';
  10.     }
  11.     function setTheme() {
  12.         const theme = getTheme()
  13.         switch (theme) {
  14.             case 'dark':
  15.                 document.styleSheets[0].disabled = false
  16.                 document.styleSheets[1].disabled = true
  17.                 break;
  18.             case 'light':
  19.                 document.styleSheets[0].disabled = true
  20.                 document.styleSheets[1].disabled = false
  21.                 break;
  22.         }
  23.     }
  24.     setTheme()
  25.     function change() {
  26.         const theme = getTheme()
  27.         switch (theme) {
  28.             case 'dark':
  29.                 document.cookie = 'theme=light; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/';
  30.                 break;
  31.             case 'light':
  32.                 document.cookie = 'theme=dark; expires=Thu, 18 Dec 2031 12:00:00 GMT; path=/';
  33.                 break;
  34.         }
  35.         setTheme()
  36.     }
复制代码
15#
 楼主| 发表于 2021-11-12 17:55:28 | 只看该作者
G.K.D 发表于 2021-11-12 16:16
我这种是大家常用的方案,Github、知乎 等大网站都是这样做的,你看一下他们的源代码就能发现~

当然,这 ...

非常感谢大佬,我个人感觉是合并在一起的确高大上点,但奈何自己尝试过大佬给的方法,但好像不成功,实在是有愧于大佬。是我知识储备不够的问题。 再次感谢
16#
 楼主| 发表于 2021-11-12 18:06:14 | 只看该作者
518 发表于 2021-11-12 17:02
参照大佬@G.K.D 写的,改了一下

啊 果然都是牛人  这一波就非常完美了  感谢2位大佬  
此贴继续供后续他人学习围观。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-12-24 17:48 , Processed in 0.214349 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表