提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:龚雪|2024-01-16 09:57:04.110|阅读 38 次
概述:本文将主要介绍如何用DHTMLX Gantt构建类似JIRA式的项目路线图,欢迎下载最新版组件体验!
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。
在web项目中使用DHTMLX Gantt时,开发人员经常需要满足与UI外观相关的各种需求。因此他们必须确定JavaScript甘特图库的自定义能力,因此本文仅继续介绍DHTMLX Gantt的自定义用例。
在这个系列的文章中,您将学习如何使用DHTMLX Gantt组件构建类似jira的项目路线图。在上文中(点击这里回顾>>)主要介绍了项目路线图的用例、时间刻度和Today标记定制等,本文将继续讲解如何实现定制,持续关注我们哦~
在路线图时间线中显示的工作项自定义图标可能是这个场景中最奇怪的元素,我们在之前的文章中解释了它们的含义,现在想揭开这些图标是如何实现的。
在实践中,这些方形图标被添加到时间轴区域的任务中,并使用addTaskLayer方法添加了一个带有自定义元素的附加层。为了确保这些元素在重新初始化后不会消失,您需要在ongantready事件处理程序中添加代码。
gantt.attachEvent("onGanttReady", function () { gantt.addTaskLayer(function (task) {
addTaskLayer方法适用于所有项目任务,因此您应该首先检查特定任务属性(项)中是否存在已保存的值。
if (task.items) {
对于这样保存的值,您必须为任务创建附加层的主元素。该元素将在函数结束时返回,并且工作项的自定义图标将被添加到其中。
const mainEl = document.createElement('div');
之后,需要遍历task.items中的所有值:
for (timestamp in task.items) {
下一步是获取unix时间戳值并将其转换为日期,结果值应该存储在一个单独的变量中。
const itemDate = new Date(+timestamp); const value = task.items[timestamp];
使用getTaskPosition方法来指定任务对象和应该显示自定义图标的日期,需要确定图标方块在时间轴上的坐标。
const sizes = gantt.getTaskPosition(task, itemDate, itemDate);
然后需要创建一个HTML元素,在其中指定一个特定的类名和一个值(数字),并添加一个带有任务ID的属性。
const el = document.createElement('div'); el.className = 'work_item'; el.innerHTML = value; el.setAttribute("data-taskId", task.id);
自定义图标必须显示在单元格的中心,默认情况下,元素宽度为15px。
let elWidth = 15;
因此,如果时间轴单元格宽度的一半小于自定义元素的宽度,则该元素将自动缩小。
let cellWidth = gantt.getScale().col_width; if (elWidth > cellWidth / 2) { elWidth = cellWidth / 2 }
考虑到元素的宽度和时间轴单元格的宽度,计算将元素放置在单元格中心所需的左边距的数量:
let marginLeft = (cellWidth - elWidth) / 2;
元素的位置(坐标)是用styles指定的:
el.style.left = sizes.left + 'px'; el.style.top = sizes.top + 'px'; el.style.marginLeft = marginLeft + 'px'; el.style.width = elWidth + "px"
工作项的自定义图标默认颜色是灰色的,此选项在未为任务指定其他颜色时使用。如果图标的日期不包括在任务的日期范围内,它将以红色突出显示。
let background = "Gray"; if (+itemDate < +task.start_date || +itemDate > +task.end_date) { background = "DarkRed"; }
如果自定义图标放置在时间轴上的任务日期内,则其颜色必须取自此任务的父任务。在单个任务和父任务中,自定义图标将具有这些任务的颜色。
else { if (task.parent) { const parent = gantt.getTask(task.parent); background = parent.color || background; } else { background = task.color || background; } }
之后使用样式设置图标的颜色,并将其附加到任务附加图层的主要元素上:
el.style.background = background; el.style.color = "#eee" mainEl.appendChild(el);
为了使自定义图标看起来与任务栏有所不同,我们添加了一个样式规则,使颜色更饱和:
filter: saturate(180%);
这样无论文本的颜色是白色、黑色还是灰色,它都不会影响文本的颜色。
然后,您必须为onEmptyClick事件添加一个事件处理程序。当单击任何时间轴单元格以及没有与任务(如任务栏和任务行)相关联的元素的路线图界面的任何点时,将调用此事件。
gantt.attachEvent("onEmptyClick", function (e) {
首先,尝试使用close()方法获取任务行或自定义图标元素:
const taskRow = e.target.closest(".gantt_task_row"); const customElement = e.target.closest(".work_item");
相对于时间轴的点击位置被保存到一个变量中。
const position = gantt.utils.dom.getRelativeEventPosition(e, gantt.$task_data).x
单击任务行或自定义图标后,您将从HTML元素获得任务ID,然后使用getTask()方法获得任务本身。
const taskId = targetElement.dataset.taskId || targetElement.dataset.taskid; const task = gantt.getTask(taskId);
之后,需要使用dateFromPos()方法获取点击位置的时间轴日期。日期带有时间参数,因此使用gantt.date.day_start()方法将时间四舍五入到一天的开始会更方便。这一步使得在addTaskLayer()方法中迭代日期元素变得更加容易。
const clickDate = +gantt.date.day_start(gantt.dateFromPos(position));
更多教程内容请下期再见,记得点赞关注收藏哦!
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:慧都网Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
在处理电子表格时,尤其是在专业和数据导向型环境中,正确设置 Excel 单元格内的数字格式至关重要。本文将介绍如何使用 Spire.XLS for Java 设置 Excel 单元格的数字格式,帮助轻松创建精美且结构清晰的电子表格。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢