jquery 如何设置黑暗模式根据时间自动打开?

nbysray5  于 2024-01-07  发布在  jQuery
关注(0)|答案(1)|浏览(182)

当前主题切换解决方案如下.

  1. let themeToggler = document.getElementById('theme-toggler');
  2. themeToggler.onclick = () => {
  3. themeToggler.classList.toggle('fa-sun');
  4. if (themeToggler.classList.contains('fa-sun')) {
  5. document.body.classList.add('active');
  6. } else {
  7. document.body.classList.remove('active');
  8. }
  9. };
  1. body.active {
  2. --backgound: #f6f6f6;
  3. --backgound-overlay: rgba(255, 255, 255, 0.4);
  4. --font-colour: #202020
  5. }
  6. :root {
  7. --backgound: #202020;
  8. --backgound-overlay: rgba(32, 32, 32, 0.8);
  9. --font-colour: #ecbf1d
  10. }
  11. html {
  12. background: var(--backgound);
  13. }
  14. body {
  15. box-sizing: border-box;
  16. width: 100%;
  17. margin: 0;
  18. padding: 0;
  19. }
  1. <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" rel="stylesheet"/>
  2. <button type="button" id="theme-toggler" class="fas fa-moon "></button>

如何实现基于时间/定时器的自动切换到黑暗模式?

svujldwt

svujldwt1#

在解决计时器/定时问题之前,需要正确地获得html/css/JS基础。
黑暗模式应该在一个名为.dark-mode的类中得到体现。规则和css选择器应该得到简化,themeToggler应该改为在两个类名.fa-sun.fa-moon之间切换,以便充分利用字体-真棒类名。

  • 就通过JavaScript定位HTML-DOM而言,document.documentElement等于HTMLHtmlElement-元素或html-标记。
  • :root在通过CSS定位HTML方面等于html-标记。

因此,css规则可以压缩为3条;两条处理与主题相关的变量声明,一条应用html主体范围内的变量。
dark-mode的主题更改类名在HTMLHtmlElement-元素处应用/从HTMLHtmlElement-元素中撤回。

  1. let themeToggler = document.getElementById('theme-toggler');
  2. themeToggler.onclick = () => {
  3. themeToggler.classList.toggle('fa-sun');
  4. themeToggler.classList.toggle('fa-moon');
  5. if (themeToggler.classList.contains('fa-sun')) {
  6. document.documentElement.classList.add('dark-mode');
  7. } else {
  8. document.documentElement.classList.remove('dark-mode');
  9. }
  10. };
  1. :root {
  2. --backgound: #f6f6f6;
  3. --backgound-overlay: rgba(255, 255, 255, 0.4);
  4. --font-colour: #202020
  5. }
  6. :root.dark-mode {
  7. --backgound: #202020;
  8. --backgound-overlay: rgba(32, 32, 32, 0.8);
  9. --font-colour: #ecbf1d
  10. }
  11. body {
  12. box-sizing: border-box;
  13. width: 100%;
  14. margin: 0;
  15. padding: 0;
  16. color: var(--font-colour);
  17. background: var(--backgound);
  18. transition: background .4s ease-out;
  19. /* transition: background 5s ease-in, color 1s ease-out; */
  20. }
  1. <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" rel="stylesheet"/>
  2. <button type="button" id="theme-toggler" class="fas fa-moon"></button>
  3. <h1>toggling the theme</h1>

在第二步中,可以进一步改进这种方法。只需在文档的根目录处切换'dark-mode'类就足够了,切换按钮的图标,以及每个图标的出现时间和方式,然后成为CSS规则集的一部分。不需要显式地切换fa类名。
CSS仍然很精简,而JavaScript则缩减为一个易于实现和注册的事件处理程序。
基于时间的切换现在可以更容易地实现,因为复杂性已经从基本的切换方法中去除。

  1. function handleToggleTheme(evt) {
  2. document.documentElement.classList.toggle('dark-mode');
  3. }
  4. document
  5. .querySelector('#theme-toggler')
  6. .addEventListener('click', handleToggleTheme);

x

  1. :root {
  2. --backgound: #f6f6f6;
  3. --backgound-overlay: rgba(255, 255, 255, 0.4);
  4. --font-colour: #202020
  5. }
  6. :root.dark-mode {
  7. --backgound: #202020;
  8. --backgound-overlay: rgba(32, 32, 32, 0.8);
  9. --font-colour: #ecbf1d
  10. }
  11. :root.dark-mode #theme-toggler:before {
  12. content: "\f185"; /* sun */
  13. }
  14. #theme-toggler:before {
  15. content: "\f186"; /* moon */
  16. }
  17. body {
  18. box-sizing: border-box;
  19. width: 100%;
  20. margin: 0;
  21. padding: 0;
  22. color: var(--font-colour);
  23. background: var(--backgound);
  24. transition: background .4s ease-out;
  25. /* transition: background 5s ease-in, color 1s ease-out; */
  26. }
  1. <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" rel="stylesheet"/>
  2. <button type="button" id="theme-toggler" class="fas"></button>
  3. <h1>toggling the theme</h1>

的一个字符串

展开查看全部

相关问题