「实战应用」如何用DHTMLX构建自定义JavaScript甘特图(三)
DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求是最完善的甘特图图表库。当您声称您的产品具有高级定制功能时客户一定会对产品进行严格测试这个规则当然适用于DHTMLX Gantt官方技术团队收到了很多关于如何在JavaScript甘特图组件中实现某些外观定制的请求结合实际的案例我们将在本文中为您展示如何在实践中实现这些定制。在上文中我们介绍了如何为任务分配资源以及任务栏中的任务名称和资源等本文将继续介绍如何高亮显示项目任务和周末等。高亮显示项目的任务和周末当通过DHTMLX构建的JavaScript甘特图管理项目时能够突出显示属于不同项目和周末的任务组是很有用的。让我们从突出显示项目的任务开始。要启用此特性需要应用根据任务坐标绘制的附加层但在此之前请检查任务类型是否为project。gantt.addTaskLayer(function (task) { if (task.type project) {使用getTaskPosition()方法获取项目坐标最上面的坐标是已知的——尺寸对象最上面的参数。const sizes gantt.getTaskPosition(task, task.start_date, task.end_date);将最左边的任务坐标添加到左边数组将最右边的坐标添加到右边数组然后遍历项目的每个子任务并添加这些坐标。另外根据子任务的坐标增加sizes对象中的height参数。const left [sizes.left]; const right [sizes.left sizes.width]; gantt.eachTask(function (child) { const childSizes gantt.getTaskPosition(child, child.start_date, child.end_date); left.push(childSizes.left) right.push(childSizes.left childSizes.width) if (sizes.height childSizes.top childSizes.height) sizes.height childSizes.top childSizes.height - sizes.top }, task.id);在遍历所有任务之后必须对左侧数组进行排序以获得最小值然后将其添加到sizes对象的左侧参数中。sizes.left left.sort((a, b) a - b)[0]接下来对正确的数组进行排序但不要将最右边的值添加到sizes对象的右边参数中。相反从结果值中减去最左边的坐标以获得矩形的宽度。const mostRight right.sort((a, b) a - b).reverse()[0] sizes.width mostRight - sizes.left然后您需要创建一个HTML元素并从sizes对象中获取其坐标。在样式中从项目的颜色参数中指定颜色如果不指定颜色则默认设置为灰色。在突出显示周末时应该应用timeline_cell_class模板。在这里您应该检查数组中是否有包含周末的日期如果有则返回一个自定义类名。const weekends [ new Date(2025, 11, 24), new Date(2025, 11, 25), new Date(2025, 11, 31), new Date(2026, 0, 1), ] gantt.templates.timeline_cell_class function (task, date) { if (weekends.indexOf(date) -1) { return weekend; } };任务顶部的自定义图标最后我们想与大家分享如何在任务顶部显示自定义图标。一个简单的方法是使用addTaskLayer()方法使用此方法您可以检查任务是否具有icon参数该参数将指示任务是否具有自定义图标它是我们添加到演示项目中的自定义任务属性。gantt.addTaskLayer(function (task) { if (task.type project) {之后让我们使用getTaskPosition()方法获取任务的坐标。然后创建一个HTML元素根据icon参数从带有图标的数组中指定图像并设置样式。const sizes gantt.getTaskPosition(task, task.end_date, task.end_date); const img document.createElement(img); img.src icons[task.icon - 1] img.style left: ${sizes.left - 10}px; width: 30px; top: ${sizes.top}px; height: 30px; margin-top: 2px; position: absolute; border-radius: 2px; color: white; opacity: 0.9; z-index:1; pointer-events: none; return img;就是这样按照上面的说明您可以实现我们示例中的关键自定义甘特图特性并将它们添加到您的项目中。

相关新闻

Redline源码解读:从CGPoint扩展到AlignmentGuide可视化

Redline源码解读:从CGPoint扩展到AlignmentGuide可视化

Redline源码解读:从CGPoint扩展到AlignmentGuide可视化 【免费下载链接】Redline Redlines for SwiftUI 项目地址: https://gitcode.com/gh_mirrors/redli/Redline 在SwiftUI开发中,布局调试常常让开发者头疼。Redline作为一款强大的SwiftUI布局调…

2026/7/21 16:13:01 阅读更多 →
如何快速搭建Calculator项目:基于Java 11的完整安装教程 [特殊字符]

如何快速搭建Calculator项目:基于Java 11的完整安装教程 [特殊字符]

如何快速搭建Calculator项目:基于Java 11的完整安装教程 🚀 【免费下载链接】Calculator Calculator app created with Java Swing, It is simple with an easy code to help novices learn how to operate a calculator. 项目地址: https://gitcode.c…

2026/7/21 16:12:01 阅读更多 →
108、RAW域黑电平校正与坏点校正:动态阈值算法、产线标定与自适应修复策略

108、RAW域黑电平校正与坏点校正:动态阈值算法、产线标定与自适应修复策略

108、RAW域黑电平校正与坏点校正:动态阈值算法、产线标定与自适应修复策略 去年在调试某款旗舰手机主摄时,遇到一个诡异的暗光偏色问题——夜景模式下,画面左下角总是泛着一层淡淡的紫红色,像被谁偷偷泼了墨水。ISP团队查了三天,AWB、CCM、LSC都翻了个底朝天,最后发现是…

2026/7/21 16:12:01 阅读更多 →

最新新闻

深入解析STM32 GPIO配置:从寄存器到库函数的完整思维模型

深入解析STM32 GPIO配置:从寄存器到库函数的完整思维模型

为什么很多STM32开发者,即使能点亮LED灯,却依然对GPIO配置感到困惑?为什么照着例程配置的代码,换个引脚或换个模式就出问题?为什么明明配置了输出模式,引脚却始终没有信号?如果你也有这些疑问&a…

2026/7/21 21:12:42 阅读更多 →
Jafka生产者与消费者实战:高性能消息发送与接收的5个技巧

Jafka生产者与消费者实战:高性能消息发送与接收的5个技巧

Jafka生产者与消费者实战:高性能消息发送与接收的5个技巧 【免费下载链接】jafka a fast and simple distributed publish-subscribe messaging system (mq) 项目地址: https://gitcode.com/gh_mirrors/ja/jafka Jafka是一款快速简单的分布式发布-订阅消息系…

2026/7/21 21:12:42 阅读更多 →
Letgo框架API全攻略:开发者必备的接口使用指南

Letgo框架API全攻略:开发者必备的接口使用指南

Letgo框架API全攻略:开发者必备的接口使用指南 【免费下载链接】letgo go web 框架 golang web框架 轻量级高并发 go web framework 项目地址: https://gitcode.com/gh_mirrors/le/letgo Letgo是一款轻量级高并发的Golang Web框架,专为快速构建高…

2026/7/21 21:12:42 阅读更多 →
为什么t-SNE比PCA更适合可视化?t-SNE-tutorial揭示关键差异

为什么t-SNE比PCA更适合可视化?t-SNE-tutorial揭示关键差异

为什么t-SNE比PCA更适合可视化?t-SNE-tutorial揭示关键差异 【免费下载链接】t-SNE-tutorial A tutorial on the t-SNE learning algorithm 项目地址: https://gitcode.com/gh_mirrors/ts/t-SNE-tutorial t-SNE-tutorial是一个专注于t-SNE学习算法的教程项目…

2026/7/21 21:12:42 阅读更多 →
Unity节奏游戏开发:使用Koreographer实现音频同步与事件驱动

Unity节奏游戏开发:使用Koreographer实现音频同步与事件驱动

1. 项目概述:为什么选择Koreographer开启你的节奏游戏之旅?如果你对音乐游戏开发感兴趣,或者想为自己喜欢的音乐制作一个可玩的互动体验,那么“在Unity中制作节奏游戏”绝对是一个充满乐趣且回报丰厚的项目。市面上有《节奏光剑》…

2026/7/21 21:12:42 阅读更多 →
鸿蒙 ArkTS 实战:Home Energy Meter 从家庭用电估算到家庭能耗应用完整解析

鸿蒙 ArkTS 实战:Home Energy Meter 从家庭用电估算到家庭能耗应用完整解析

鸿蒙 ArkTS 实战:Home Energy Meter 从家庭用电估算到家庭能耗应用完整解析 前言 家庭用电估算 是一个偏工具属性的鸿蒙 ArkTS 单页应用。它围绕“通过功率、使用小时和电价三个参数估算耗电度数与费用,适合空调、烘干机、电暖器等设备。”这个具体需求…

2026/7/21 21:11:41 阅读更多 →

日新闻

Octane Render与C4D汉化版安装与优化指南

Octane Render与C4D汉化版安装与优化指南

1. Octane Render与C4D的黄金组合:为什么选择这个方案?在三维创作领域,渲染器的选择往往决定了作品的最终呈现质量和工作效率。作为Cinema 4D(C4D)用户,Octane Render的GPU加速特性与实时预览功能&#xff…

2026/7/21 0:00:19 阅读更多 →
GPMC接口设计:异步/同步模式与多路复用配置实战

GPMC接口设计:异步/同步模式与多路复用配置实战

1. GPMC接口设计:从硬件连接到软件配置的全局视角在嵌入式系统开发中,尤其是基于TI Sitara系列如AM263x这类高性能微控制器的项目里,外部存储器的扩展几乎是绕不开的一环。无论是存放大量非易失性代码的NOR Flash,还是作为高速数据…

2026/7/21 0:00:19 阅读更多 →
UE5 GAS框架下RPG被动技能系统:从核心原理到实战实现

UE5 GAS框架下RPG被动技能系统:从核心原理到实战实现

1. 项目概述:UE5 GAS RPG被动技能的核心价值在UE5里用GAS(Gameplay Ability System)做RPG游戏,主动技能像是你手里的武器,按一下打一下,逻辑直接,反馈也快。但被动技能,它更像是你身…

2026/7/21 0:00:19 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/7/21 8:25:39 阅读更多 →

月新闻