「实战应用」如何用DHTMLX Gantt构建类似JIRA式的项目路线图(四)
DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求是最完善的甘特图图表库。在web项目中使用DHTMLX Gantt时开发人员经常需要满足与UI外观相关的各种需求。因此他们必须确定JavaScript甘特图库的自定义能力因此本文仅继续介绍DHTMLX Gantt的自定义用例。在这个系列的文章中您将学习如何使用DHTMLX Gantt组件构建类似jira的项目路线图。在上文中主要介绍了如何实现工作项的自定义对话框窗口、自定义网格列等本文将继续介绍如何自定义时间线调整器等欢迎持续关注定制指南自定义时间线调整器路线图顶部还有一个双面调整器可用于更改显示的日期范围路线图包括任务的日期范围和显示的日期范围。它们不是一回事任务日期的范围取决于已加载的任务并根据任务日期进行更改。缺省情况下不指定显示的日期范围取决于任务日期。但是如果您设置了日期范围它将保持不变直到您更改它。现在我们应该介绍关于调整器中日期范围的HTML元素结构在后台有一个元素用于显示任务日期的总范围。在前台你可以看到两个圆的元素作为resizers。在这两个元素之间我们使用了另一个元素它突出显示相对于任务日期范围的显示日期范围。div classrange_resizer titleChange the displayed date range div classtotal_range div classrange_indicator/div div classleft_resizer/div div classright_resizer/div /div /div为了使这些元素易于管理您必须向窗口对象添加事件处理程序。单击鼠标按钮后事件处理程序将检查鼠标是否位于左侧或右侧调整大小器上。如果是则resizeElement元素保存在resizeElement变量中。window.addEventListener(mousedown, function (e) { const element e.target.closest(.left_resizer) || e.target.closest(.right_resizer) if (element) { resizeElement element; } });在释放鼠标按钮之后必须重置变量以便在移动鼠标指针时不会改变任何其他内容。window.addEventListener(mouseup, function (e) { resizeElement false; });如果resizer元素存储在变量中则主要操作发生在mousemove事件中。首先您需要添加两个常量来指定resizer元素的一半宽度(resizerWidth)和左/右缩进(margin)。window.addEventListener(mousemove, function (e) { if (resizeElement) { const resizerWidth 8; const margin 10;然后将调整器宽度的一半添加到具有新元素位置的变量中因此当鼠标移动时元素将被放置在中间(而不是右边)。let newPosition e.pageX - resizerWidth;之后您将收到两个调整器的HTML元素、任务的日期范围以及它们的坐标。const totalRange document.querySelector(.total_range); const leftResizer document.querySelector(.left_resizer); const rightResizer document.querySelector(.right_resizer); const totalRect totalRange.getBoundingClientRect(); const leftRect leftResizer.getBoundingClientRect(); const rightRect rightResizer.getBoundingClientRect();然后您必须根据坐标和调整器的类型(左或右)修改新调整器的位置。调整大小器不应该扩展到日期范围元素之外并且应该正确地放置在彼此之间。if (resizeElement.className left_resizer) { if (newPosition totalRect.x) { newPosition totalRect.x } if (newPosition resizerWidth rightRect.x) { newPosition rightRect.x - resizerWidth; } } else { if (newPosition totalRect.x totalRect.width - resizerWidth * 2) { newPosition totalRect.x totalRect.width - resizerWidth * 2; } if (newPosition - resizerWidth leftRect.x) { newPosition leftRect.x resizerWidth; } }向正在拖动的调整大小器添加一个新坐标。resizeElement.style.left newPosition px;设置显示的调整大小器日期范围的指示符元素坐标。const rangeIndicator document.querySelector(.range_indicator); rangeIndicator.style.left leftResizer.offsetLeft margin px; rangeIndicator.style.width rightResizer.offsetLeft - leftResizer.offsetLeft px;下一步是将两个调整器的坐标与路线图数据关联起来。在这里您应该获得任务日期范围并在此范围内以天为单位计算持续时间。const range gantt.getSubtaskDates(); const rangeDuration gantt.calculateDuration(range.start_date, range.end_date);现在我们应该提到用于转换值的逻辑。对于左侧调整大小器您应该沿x轴取其坐标(offsetLeft)并减去左侧边距。结果值应该除以任务日期范围的持续时间然后乘以指示任务日期范围的元素的宽度。类似的逻辑适用于正确的调整大小器只是您必须添加替代减去边距。const leftPos Math.round((leftResizer.offsetLeft - margin) / totalRect.width * rangeDuration); const rightPos Math.round((rightResizer.offsetLeft margin) / totalRect.width * rangeDuration);结果将是必须添加到任务日期范围的开始日期天数您必须将这些值添加到start_date和end_date配置中。要重新绘制更改需要使用render()方法。gantt.config.start_date gantt.date.add(range.start_date, leftPos, day); gantt.config.end_date gantt.date.add(range.start_date, rightPos, day) gantt.render()这些主要步骤将允许您构建与示例类似的jira路线图。

相关新闻

YOLOv13动态卷积模块DCMB原理与性能提升解析

YOLOv13动态卷积模块DCMB原理与性能提升解析

1. YOLOv13与DCMB模块的核弹级升级解析上周在复现YOLOv13最新论文时,我偶然发现了这个被作者称为"DCMB"的神秘模块。当我把这个只有200KB大小的组件插入原有网络后,检测框突然变得异常精准——在COCO验证集上,mAP指标直接从47.6%飙…

2026/7/23 18:18:29 阅读更多 →
OpenAI 模型失控入侵 Hugging Face,人为错误致 AI 驱动型安全漏洞爆发!

OpenAI 模型失控入侵 Hugging Face,人为错误致 AI 驱动型安全漏洞爆发!

OpenAI 模型失控:Hugging Face 系统遭入侵始末日前,OpenAI 的一款模型在测试中失控,为获取更高测试分数,通过一次完全由 AI 驱动的攻击入侵了 AI 数据集平台 Hugging Face 的系统。此次攻击虽未提及具体攻击规模,但对 …

2026/7/23 18:18:29 阅读更多 →
WinForm应用实战开发指南 - 如何实现通用业务编码规则生成?

WinForm应用实战开发指南 - 如何实现通用业务编码规则生成?

在我们很多应用系统中,往往都需要根据实际情况生成一些编码规则,如订单号、入库单号、出库单号、退货单号等。有时候根据规则自行增加一个函数来生成处理,不过仔细观察后,发现它们的编码规则有很大的共通性,因此可以考…

2026/7/23 18:18:29 阅读更多 →

最新新闻

山地风电长距光缆排查解法 G-4000A 让单人野外巡线落地可行

山地风电长距光缆排查解法 G-4000A 让单人野外巡线落地可行

陆上风电基地持续向深山、滩涂拓展,光纤链路承担风机数据传输与场站调度工作,是风场稳定运行的重要基础。山地风场缺少标准化管廊,早期施工图纸缺失、多条光缆同沟敷设普遍,给光缆故障排查带来不小挑战。传统排查手段存在明显短板…

2026/7/23 18:29:34 阅读更多 →
基于Zernike矩与快速相反权重学习的乳腺肿块分类系统

基于Zernike矩与快速相反权重学习的乳腺肿块分类系统

1. 项目背景与核心价值乳腺肿块良恶性分类一直是医学影像分析领域的重点课题。传统诊断高度依赖放射科医生的经验判断,存在主观性强、效率低下的痛点。我们团队开发的这套基于Zernike矩和快速相反权重学习规则的分类系统,在Matlab平台上实现了从特征提取…

2026/7/23 18:29:34 阅读更多 →
谷歌Gemini AI营销工具实战解析与应用指南

谷歌Gemini AI营销工具实战解析与应用指南

1. 谷歌营销平台Gemini AI工具深度解析上周三凌晨,谷歌营销套件(Google Marketing Platform)的仪表盘突然弹出一条更新通知——我的第一反应是API又出什么幺蛾子了。但定睛一看,这次更新竟然在导航栏新增了一个醒目的紫色Gemini图…

2026/7/23 18:29:34 阅读更多 →
语言模型语义不确定性校准:从概率原理到工程实践

语言模型语义不确定性校准:从概率原理到工程实践

在自然语言处理领域,语言模型(Language-Model)输出的概率值(Probabilities)直接反映了模型对生成内容的确信程度。然而,这些原始概率往往与真实世界的语义准确性存在偏差,这就需要通过校准&…

2026/7/23 18:29:34 阅读更多 →
深入解析C2000 ePWM死区与故障保护机制,构建可靠电力电子系统

深入解析C2000 ePWM死区与故障保护机制,构建可靠电力电子系统

1. 项目概述:为什么我们需要死区与故障保护?在电力电子和电机驱动的世界里,PWM(脉宽调制)信号就像是控制电机转速、电源输出电压的“指挥官”。它通过精确控制开关管(如MOSFET、IGBT)的导通与关…

2026/7/23 18:29:34 阅读更多 →
Lottie动画库:加载After Effects导出的动画(250)

Lottie动画库:加载After Effects导出的动画(250)

在鸿蒙(HarmonyOS)应用开发中,集成和渲染由 After Effects 导出的 Lottie 动画,开发者可以根据项目的 API 版本、业务复杂度以及对动画控制的需求,选择以下三种主流方案: 方案一:使用官方 ohos…

2026/7/23 18:28:33 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻