「实战应用」如何用DHTMLX将上下文菜单集成到JavaScript甘特图中(一)

news2024/11/30 14:45:26

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。

DHTMLX Gantt是一个高度可定制的工具,可以与项目管理应用程序所需的其他功能相补充。在本文中您将学习如何使用自定义上下文菜单来补充基于DHTMLX的JavaScript甘特图,来提高用户在任务管理中的效率。考虑到DHTMLX产品的良好互兼容性,DHTMLX Suite的Menu小部件是实现本教程目标的甘特图组件的完美补充。

DHTMLX Gantt最新正式版下载

让我们更详细地介绍一下这个演示,并为您提供技术细节,将类似的功能集成到项目中。

初始化和配置上下文菜单

在用例场景中,上下文菜单是一个有用的UI元素,它可以根据用户与甘特图交互的上下文显示不同的选项。

如果您右键单击下面示例中甘特图的任何任务,可以尝试所有可用的任务操作。

「实战应用」如何用DHTMLX将上下文菜单集成到JavaScript甘特图中

为了节省时间,我们将省略明确描述甘特图组件的初始化阶段,直接使用DHTMLX Menu实现上下文菜单。

第一步是创建上下文菜单的新实例。

let contextMenu = new dhx.ContextMenu(null, { css: "dhx_widget--bg_gray" });

之后使用onContextMenu事件处理程序,该处理程序在右键单击任务后触发。

gantt.attachEvent("onContextMenu", function (taskId, linkId, event) {

在菜单配置中,根据单击位置显示不同的菜单项。在时间轴中调用常规任务的上下文菜单时,它将包含“拆分任务”项。但是在项目类型任务的上下文菜单中以及在网格区域调用任务菜单时,此选项不可用,因为假设任务应该在单击位置进行拆分。

「实战应用」如何用DHTMLX将上下文菜单集成到JavaScript甘特图中

在事件处理程序中函数的最开始,有必要收集上下文菜单调用的确切位置的信息。

let itemsConfig = null;
if (taskId) {
const task = gantt.getTask(taskId);

为此,您需要几个配置(变量):

  • isTaskBar – 显示时间轴中的任务栏(此处不考虑任务类型)是否被单击。
const isTaskBar = event.target.closest(".gantt_task_line");
  • isParentTask – 显示任务是否有子任务。
const isParentTask = gantt.hasChild(task.id);
  • isSplitTask – 当任务的所有子任务(任务栏)显示在时间轴的单行上时,显示任务是否以拆分模式呈现。
const isSplitTask = task.render === "split";
  • barHidden – 显示任务是否显示在时间轴中。
const barHidden = task.hide_bar;

如果任务有父任务,则需要确定其父任务是否显示在分裂模式中。它是这样做的:

let hasSplitParent = false;
if (task.parent) {
const parent = gantt.getTask(task.parent);
hasSplitParent = parent.render === "split";
}

之后,您需要将所有参数添加到itemsConfig对象。

itemsConfig = { isTaskBar, isParentTask, isSplitTask, barHidden, hasSplitParent };

对于自定义上下文菜单,您需要删除所有以前的上下文菜单项,然后添加由generateMenuItems函数返回的新项。

contextMenu.data.removeAll();
contextMenu.data.parse(generateMenuItems(itemsConfig));

现在是时候在单击位置显示上下文菜单了。

contextMenu.showAt(event);

接下来,您需要计算鼠标点击相对于时间轴的位置。从得到的单击位置,您将获得单击日期,它应该被添加到clickDate参数中,它将用于各种上下文菜单操作。

const clickPosition = gantt.utils.dom.getRelativeEventPosition(event, gantt.$task_data).x;
clickDate = gantt.dateFromPos(clickPosition)

onContextMenu事件处理程序的函数必须返回false以禁用默认的上下文菜单功能(即浏览器不应该显示默认的上下文菜单)。

现在让我们返回到generateMenuItems函数,在这个函数中,生成上下文菜单项的数据。上下文菜单项的每个对象都包含一个图标、项类型、ID和文本。

{
icon: "dxi dxi-chevron-up",
type: "menuItem",
id: "add_sibling_above",
value: "Add sibling above",
},

接下来,您需要为“取消复制/剪切操作”和“显示所有隐藏任务”两个菜单项创建对象。

const cancelCopyCut = {
icon: "dxi dxi-close",
type: "menuItem",
id: "cancel_paste",
value: "Cancel copy/cut operation",
};
const showAllHidden = {
icon: "dxi dxi-eye",
type: "menuItem",
id: "show_hidden",
value: "Show all hidden tasks",
};

在网格或时间轴上单击任务栏后,将使用配置调用该函数,并将各种元素添加到上下文菜单中。

当在甘特图的其他区域发生单击时,需要检查是否选择了用于复制和剪切的任务。如果是,则将此对象添加到菜单项数组中。如果隐藏了某些任务,则会添加第二个菜单项。在上述条件下,无论单击甘特图中的位置如何,这些菜单项将始终可见。

const menuItems = [];
if (tasksToCopy.length + tasksToCut.length > 1) {
menuItems.push(cancelCopyCut);
}
if (Object.keys(hiddenTasks).length) {
menuItems.push(showAllHidden);
}
return menuItems;

现在回到上下文菜单配置,在创建上下文菜单的实例之前,考虑使用generateMenuItems函数是合理的,以免以后再回到这个问题上。

您必须为单击上下文菜单项添加事件处理程序。对于每次单击,将调用单击函数,这个函数将使用菜单项的ID。

contextMenu.events.on("click", function (id, e) {
applyCommand(id);
targetId = null;
});

现在我们可以分别关注每个上下文菜单选项的配置。

篇幅有限未完待续,更多内容敬请期待.......

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1824593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机木马

病毒具有传播特性、恶意性 木马没有巨大的恶意,主要是帮黑客做些事情,没害你,没有那么广大的传播性

LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码

LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码 LIMS实验室信息管理系统,是一种基于计算机硬件和数据库技术,集多个功能模块为一体的信息管理系统。该系统主…

有监督学习——梯度下降

1. 梯度下降 梯度下降(Gradient Descent)是计算机计算能力有限的条件下启用的逐步逼近、迭代求解方法,在理论上不保证下降求得最优解。 e.g. 假设有三维曲面表达函数空间,长(x)、宽(y)轴为子变量,高(z)是因变量&…

【已解决】引入 element 组件无法使用编译错误 ERROR Failed to compile with 1 error

如果大家使用这个vue 配合 element 框架不熟练,当你顺利按照文档安装好 vue 和 element 的时候想要使用element 的组件时候确无法展示出来,甚至报错。不妨看看是不是这个问题, 1.首先使用element 的时候,前提是把必须要的 elemen…

博科SAN交换机初始化和Zone创建

1 初始化 博科的SAN交换机默认配置: 地址:10.77.77.77 账户:admin 密码:password 设备硬件查看 ***-SAN-1:admin> chassisshowFAN Unit: 1 Fan Direction: Reverse (Non-portside Intake) Time Awake: 0 daysP…

基于Python+Flask+MySQL+HTML的B站数据可视化分析系统

FlaskMySQLVue 基于PythonFlaskMySQLHTML的B站数据可视化分析系统 项目采用前后端分离技术,项目包含完整的前端HTML,以及Flask构成完整的前后端分离系统 爬虫文件基于selenium,需要配合登录账号 简介 主页 登录页面,用户打开浏…

电脑屏幕录制怎么录制?这7个录制屏幕的技巧值得一试!

电脑屏幕录制怎么录制?屏幕录制是什么? 简单地说,电脑屏幕录制就是在你的设备屏幕上录制视频。它可以捕捉屏幕上正在发生的事情,并让你与其他人分享。记录电脑、手机或笔记本电脑屏幕的原因有很多: 1. 一个简单的屏幕录制可以用…

C++程序员笔试训练

面试题1:使用库函数将数字转换位字符串 考点:c语言库函数中数字转换位字符串的使用 char *gcvt(double number, int ndigit, char *buf);参数说明: number:待转换的double类型数值。 ndigit:保留的小数位数。 buf&am…

环保绩效创A带来的多重效益?

在当今时代,环境保护已成为全球共识,而重点行业的环保绩效创A更是推动绿色转型、朗观视觉实现可持续发展的关键所在。随着工业化进程的加快,环保问题日益凸显,如何通过环保绩效创A,推动重点行业走上绿色、低碳、循环的…

【C++】和【预训练模型】实现【机器学习】【图像分类】的终极指南

目录 💗1. 准备工作和环境配置💕 💖安装OpenCV💕 💖安装Dlib💕 下载并编译TensorFlow C API💕 💗2. 下载和配置预训练模型💕 💖2.1 下载预训练的ResNet…

文章MSM_metagenomics(三):Alpha多样性分析

欢迎大家关注全网生信学习者系列: WX公zhong号:生信学习者Xiao hong书:生信学习者知hu:生信学习者CDSN:生信学习者2 介绍 本教程使用基于R的函数来估计微生物群落的香农指数和丰富度,使用MetaPhlAn prof…

热镀锌钢板耐液体性能测 彩钢板抗拉强度检测

钢板检测范围:钢板、彩钢板、不锈钢板、耐磨钢板、合金钢板、压型钢板、冷轧钢板、弹簧钢板、碳钢板、热轧钢板、厚钢板、热镀锌钢板、冲孔钢板、船用钢板、硅钢板、花纹钢板、压力容器钢板、耐候钢板、 钢板检测项目包括化学性能检测、性能检测、机械性能检测、老…

JAVA-CopyOnWrite并发集合

文章目录 JAVA并发集合1_实现原理2_什么是CopyOnWrite?3_CopyOnWriteArrayList的原理4_CopyOnWriteArraySet5_使用场景6_总结 JAVA并发集合 从Java5开始,Java在java.util.concurrent包下提供了大量支持高效并发访问的集合类,它们既能包装良好的访问性能…

SwiGLU激活函数与GLU门控线性单元原理解析

前言 SwiGLU激活函数在PaLM,LLaMA等大模型中有广泛应用,在大部分测评中相较于Transformer FFN中所使用的ReLU函数都有提升。本篇先介绍LLaMA中SwiGLU的实现形式,再追溯到GLU门控线性单元,以及介绍GLU的变种,Swish激活…

phpcms仿蚁乐购淘宝客网站模板

phpcms仿蚁乐购网站模板,淘宝客行业模板免费下载,该模板网站很容易吸引访客点击,提升ip流量和pv是非常有利的。本套模板采用现在非常流行的全屏自适应布局设计,且栏目列表以简洁,非常时尚大气。页面根据分辨率大小而自…

华为北向网管NCE开发教程(7)历史告警采集

1准备工作 准备一个FTP服务器和网管北向网络通,网管北向生成告警文件,会推送到准备的FTP服务器上。 linux,都是自带FTP的,如果是linux则无需自己搭建,如果是windows则需要自己搭建 2生成告警文件 2.1方法说明getAll…

使用libcurl实现简单的HTTP访问

代码; #include <stdio.h> #include <stdlib.h> #include <curl/curl.h> // 包含libcurl库 FILE *fp; // 定义一个文件标识符 size_t write_data(void *ptr,size_t size,size_t nmemb,void *stream) { // 定义回调函数&#xff0c;用于将…

LeetCode-2779. 数组的最大美丽值【数组 二分查找 排序 滑动窗口】

LeetCode-2779. 数组的最大美丽值【数组 二分查找 排序 滑动窗口】 题目描述&#xff1a;解题思路一&#xff1a;滑动窗口与排序解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums 和一个 非负 整数 k 。 在一步操…

《华为项目管理之道》第1章笔记

《华为项目管理之道》&#xff0c;是新出的华为官方的项目管理书&#xff0c;整个书不错。第1章的精华&#xff1a; 1.2.2 以项目为中心的机制 伴随着项目型组织的建立&#xff0c;华为逐步形成了完备的项目管理流程和制度&#xff0c;从而将业务运 作构建在项目经营管理之…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 启动多任务排序(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 启动多任务排序(200分) 🌍 评测功能需要订阅专栏后私信联系…