当前位置: 首页 > article >正文

「实战应用」如何在 DHTMLX Scheduler 中实现动态主题切换?

创建响应式、直观的 UI 需要适应用户对应用程序各个方面的偏好。其中一项可显著提升用户体验的热门功能是能够在明暗主题之间切换。它在日程安排日历等综合组件中尤其有用。

本文将指导您在 DHTMLX Scheduler 中实现动态主题切换,使其适应用户设置的首选系统主题。

在 DHTMLX Scheduler 中引入主题切换

DHTMLX Scheduler 是一个功能强大的 JavaScript 调度小部件,内置对不同主题的支持。在本指南中,我们将重点介绍如何在“深色”和默认“浅色”(露台)主题之间切换。可以使用setSkin()方法以编程方式在 DHTMLX Scheduler 中切换主题:

// Switch to the default light theme
scheduler.setSkin("terrace");

// Switch to the dark theme
scheduler.setSkin("dark");

这些命令允许动态更新调度程序的外观,提供无缝的用户体验。

识别浏览器的首选主题

现代浏览器可以通过CSS 媒体功能 prefers-color-scheme检测用户的首选主题。您可以利用此功能相应地调整我们的 Scheduler 主题:

const prefersDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;

此代码检查用户是否将其偏好设置为暗模式,并返回布尔值。

把所有东西放在一起

让我们将主题检测与组件的初始化结合起来,以确保 Scheduler 在加载时满足用户的系统主题偏好。此外,您还将确保 Scheduler 动态适应这些偏好的变化:

window.addEventListener("DOMContentLoaded", function(){
  // Initialize Scheduler plugins and configurations
  scheduler.plugins({
    quick_info: true
  });

  scheduler.config.cascade_event_display = true;

  // Function to dynamically update the Scheduler's theme
  function updateSchedulerTheme() {
    const prefersDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;

    if (prefersDarkMode) {
      scheduler.setSkin("dark");
    } else {
      scheduler.setSkin("terrace");
    }
  }

  // Set the initial theme based on the user's preference
  updateSchedulerTheme();

  // Listen for changes in the preferred color scheme and update the theme
  window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', updateSchedulerTheme);

  // Initialize the DHTMLX Scheduler
  scheduler.init('scheduler_here', new Date(2024, 3, 20), "week");
});

通过在DOMContentLoaded事件监听器中嵌入主题更新逻辑,您可以确保 Scheduler 不仅使用其配置和插件进行初始化,而且还会立即采用用户首选的主题。这种集成提供了主题之间的无缝过渡,从而增强了整体用户体验。因此,应用程序变得更加个性化和易于访问。

添加用于切换主题的 UI 控件

不要忘记让最终用户能够手动切换主题。您需要对代码进行一些调整才能做到这一点。您必须添加一个简单的控件,让最终用户可以从三个选项中选择一个主题:浏览器默认、浅色和深色。

您需要修改updateSchedulerTheme函数。为用户选择的主题添加一个参数。如果最终用户选择浅色或深色主题,您将直接应用该主题。如果在浏览器中选择了默认主题,请使用浏览器设置中的首选主题。

function updateSchedulerTheme(selectedTheme) {
    // We use "default" for the Browser Default option
    if (!selectedTheme || selectedTheme === 'default') {
        const prefersDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
        if (prefersDarkMode) {
            scheduler.setSkin("dark");
        } else {
            scheduler.setSkin("terrace");
        }
    } else {
        scheduler.setSkin(selectedTheme);
    }
}

切换器控件的标记如下所示:

function updateSchedulerTheme(selectedTheme) {
    // We use "default" for the Browser Default option
    if (!selectedTheme || selectedTheme === 'default') {
        const prefersDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
        if (prefersDarkMode) {
            scheduler.setSkin("dark");
        } else {
            scheduler.setSkin("terrace");
        }
    } else {
        scheduler.setSkin(selectedTheme);
    }
}

最后一步是将控件连接到updateSchedulerTheme函数。可以使用以下代码完成:

const themeSwitcher = document.querySelectorAll('input[name="theme"]');
themeSwitcher.forEach(radio => {
    radio.addEventListener('change', function() {
        updateSchedulerTheme(this.value);
    });
});

在此示例中,您可以看到一切是如何组合在一起的。

结论

在 Web 应用程序中集成响应式主题切换(如 DHTMLX Scheduler 所示)可使应用程序适应用户的偏好,从而提升用户体验。通过采用此类以用户为中心的功能,您可以强调 Web 应用程序的适应性和现代性,使其更具吸引力,更易于所有用户使用。


http://www.kler.cn/a/379392.html

相关文章:

  • 鸿蒙进阶-AlphabetIndexer组件
  • ubuntu unrar解压 中文文件名异常问题解决
  • C++ 编程基础(4)函数 | 4.1、函数概述
  • jmeter压测工具环境搭建(Linux、Mac)
  • Chrome和Firefox如何保护用户的浏览数据
  • Java日志脱敏(二)——fastjson Filter + 注解 + 工具类实现
  • SpringBoot day 1104
  • ValueError: set_wakeup_fd only works in main thread
  • 干掉复杂的工具类,Hutool 工具库确实香!
  • Qt中的Model与View(Qt官网翻译版)
  • PH热榜 | 2024-11-04
  • 基于人工智能的搜索和推荐系统
  • 领域(Domain)详解
  • IPC机制总结笔记
  • 关于电脑蓝屏的那些解决方案--总有一款适合你
  • Leetcode 合并两个数组
  • mysql JSON字段使用
  • Gitlab-runner running on Kubernetes - hostAliases
  • 深度学习笔记7-最小二乘法
  • 享元模式-实现大颗粒度对象缓存机制
  • Cesium移动3D模型位置
  • docker desktop使用ubuntu18.04带图形化+运行qemu
  • 划界与分类的艺术:支持向量机(SVM)的深度解析
  • metasploit/modules/evasion 有哪些模块,以及具体使用案例
  • WebService详解
  • 服务器数据恢复—SAN环境中LUN映射错误导致文件系统一致性出错的数据恢复案例