「实战应用」如何为DHTMLX JavaScript 甘特图添加进度线

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

今天,您将学习如何使用进度线补充JavaScript 甘特图,以便于监控项目进度。

DHTMLX Gantt 最新试用版下载

什么是进度线,以及它如何为甘特图带来好处

在复杂的甘特图场景中,项目团队成员或利益相关者可能难以及时准确地估计多个任务的当前状态。这时进度线就派上用场了。它是一种曲线形式的视觉指示器,显示任务相对于其计划时间表的当前状态。这条线源于当前日期,指示每个任务的进度,为团队提供项目状态的清晰视觉摘要。此功能还可以帮助项目团队快速了解是否需要进行任何调整,而无需深入了解详细数据。

总体而言,最终用户可以从进度线的实施中获得以下好处:

  • 一目了然地了解任务状态(进行中、提前或延迟)
  • 降低错过最后期限和资源错配的风险
  • 增强团队协调
  • 更好的工作流程透明度

因此,此功能可帮助项目团队在项目管理工作流程中保持清晰度和良好的时间安排。

以下是使用 DHTMLX 构建的带有进度线的甘特图示例:

使用进度线补充 DHTMLX 甘特图的指南

DHTMLX Gantt 默认不提供进度线功能,但可以通过 Gantt API 轻松将其添加到 Gantt 配置中。

  • 先决条件

从编码角度来看,进度线是一个自定义元素,可以使用addTasklayer()方法显示在甘特图时间轴中。此方法会针对包含任务的每一行调用,这意味着您可以分段添加进度线。

如果任务在当前日期之前开始并完成,或者任务的进度状态为 0% 并在当前日期之后开始,则需要添加一条直线。如果任务进度从 0 到 100%,则绘制两条与当前日期和任务进度相关的线。可以使用 SVG 完成。您需要三个进度线坐标:

    • 与任务行和时间轴中的日期位置相关的顶点
    • 与当前任务进度相关的弯道点(及其日期)
    • 与任务行和时间轴中的日期位置相关的底部点
  • 步骤 1:定位所需元素

首先,您需要使用posFromDate()方法来获取任务在时间轴上的开始和结束日期的位置。

const startPos = gantt.posFromDate (任务.开始日期) ; const endPos = gantt.posFromDate (任务.结束日期) ;

此后,您将获得当前日期的位置。

const linePos = gantt.posFromDate (今天) ;

接下来,计算任务开始日期和结束日期的位置差,并将其乘以任务进度。结果,您将获得任务进度日期。

const progressOffset = ( endPos - startPos ) * task.progress ; const progressPos = startPos + progressOffset ;

要获取任务栏的坐标,您应该使用getTaskPosition()方法。

const大小= gantt.getTaskPosition (任务,任务。开始日期,任务。结束日期) ;
  • 步骤2:创建SVG元素并添加属性

现在您可以创建一个 SVG 元素并添加必要的属性。高度参数取自任务坐标(整行的高度),而宽度参数则是继承的。位置使用顶部和左侧样式指定。SVG 元素将占据时间轴中的整个任务行。

const svgNS = "http://www.w3.org/2000/svg" ; const svg = document.createElementNS ( svgNS , " svg" ) ; svg.classList.add ( " progress-line" ) ; svg.setAttribute ( "width" , ' inherit ' ) ; svg.setAttribute ( " height " , size.rowHeight ) ; svg.setAttribute ( " style " , ` top : $ { size.top } px ; left : 0 ; ` ) ;

之后,创建绘制线条所需的路径元素并添加属性。

const path = document.createElementNS ( svgNS ,"path" ) ; path.setAttribute ( "stroke" ,"black" ) ; path.setAttribute ( "stroke-width" ," 2" ) ; path.setAttribute ( "fill " ," none " ) ;
  • 步骤 3:计算进度线的坐标

下一步是计算线条的坐标。对于那些从未使用过 SVG 元素的人,我们想澄清一下路径坐标中使用的几个符号:

  • M – 移动构建元素的初始坐标(从 0,0 到指定坐标)。
  • L – 从当前坐标到新坐标画一条线。

坐标按以下顺序指定:

  • M x,y – 初始坐标。x 取自当前日期的位置。y 为 0,因为它是从顶部开始的第一个坐标。
  • L x,y – 任务进度日期的坐标。x 取自进度的位置。y 取自行高的一半。
  • L x,y – 结束坐标。x 取自当前日期的位置。y 取自行高。
const startPoint = `M$ { linePos } , 0 ` ;
const middlePoint = ` L $ { progressPos } , $ { size.rowHeight / 2 } ` ; const endPoint = `L $ { linePos } , $ { size.rowHeight } ` ;
  • 步骤 4:检查任务日期和进度

此时需要检查任务的日期和进度,如果任务在当前日期之前开始且进度为 100%(即 1),或者在当前日期之后开始且进度大于 0,则表示任务仍在进行中,此时需要从任务进度中画两条线,如果不满足上述条件,则画一条线,即第二个坐标被简单排除。

const progressiveTask = task.start_date < today && task.progress < 1 ; const unfinishedTask = today < = task.start_date && task.progress > 0 ; if ( progressiveTask || unfinishedTask ) { pathData = ` $ { startPoint } $ { middlePoint } $ { endPoint } ` ; } else { pathData =     ` $ { startPoint }     $ { endPoint } ` ; }

之后,将路径元素添加到 SVG 元素并返回 SVG 元素。

path.setAttribute ( " d " , pathData ) ; svg.appendChild ( path ) ;返回svg ;

步骤5:添加样式

最后一步是为进度线添加样式。

.progress-line {position: absolute;pointer-events: none;z-index: 10;
}
.progress-line path {stroke: rgba(255, 0, 0, 70%)
}

让我们澄清一下上面这段代码中使用的参数:

  • 位置:绝对; ——确保元素在时间轴上绘制在它们的位置上。
  • pointer-events: none; - 禁用 SVG 元素的鼠标事件,即当您单击 SVG 元素时,将在其下方的元素上触发单击。
  • z-index: 10; – 允许在任务栏和链接顶部显示自定义元素。
  • 描边——用于设置颜色。

就是这样。上面的说明将帮助您使用像我们的示例一样的自定义进度线来丰富您的 JavaScript 甘特图。

总结

总的来说,能够轻松地将进度线等简单但实用的功能添加到甘特图真是太好了。此功能使最终用户能够看到他们的工作如何与项目时间表保持一致,并在事情没有按计划进行时及时采取措施。使用 DHTMLX Gantt,您可以获得用于实现进度线和许多其他自定义功能的广泛 API。如果仍有疑问,请下载我们产品的30 天免费试用版并试用。敬请期待 2025 年有关 DHTMLX Gantt 自定义的更多教程。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统架构设计师-第1章-计算机系统知识要点

【本章学习建议】 根据考试大纲&#xff0c;本章主要考查系统架构设计师单选题&#xff0c;预计考1分左右。第二版教材2.2节增加了本块内容&#xff0c;但较为简略&#xff0c;需要课程补充&#xff0c;属于非重点内容。 1.1 计算机硬件组成 计算机的基本硬件系统由运算器、控…

【C】初阶数据结构3 -- 单链表

之前在顺序表那一篇文章中&#xff0c;提到顺序表具有的缺点&#xff0c;比如头插&#xff0c;头删时间复杂度为O(n)&#xff0c;realloc增容有消耗等。而在链表中&#xff0c;这些问题将得到解决。所以在这一篇文章里&#xff0c;我们将会讲解链表的定义与性质&#xff0c;以及…

网络网络层ICMP协议

网络网络层ICMP协议 1. ICMP 协议介绍 ICMP&#xff08;Internet Control Message Protocol&#xff09;是 TCP/IP 协议簇中的网络层控制报文协议。用于在 IP 主机、路由器之间传递控制消息&#xff0c;提供可能有关通信问题的反馈信息。 以及用于网络诊断或调试&#xff08;…

nvm 管理nodejs,安装pnpm后报错,出现:pnpm不是内部或外部命令,也不是可运行的程序或批处理文件。

系统环境&#xff1a;window11&#xff0c;exe安装版nvm出现的该问题&#xff0c;&#xff08;如果是解压缩配置版本&#xff0c;环境变量自己配置&#xff0c;可能就不会出现这个问题了&#xff09; 注意&#xff1a;安装nvm时&#xff0c;两个路径尽量放到一个盘上&#xff…

论文阅读:Searching for Fast Demosaicking Algorithms

今天介绍一篇有关去马赛克的工作&#xff0c;去马赛克是 ISP 流程里面非常重要的一个模块&#xff0c;可以说是将多姿多彩的大千世界进行色彩还原的重要一步。这篇工作探索的是如何从各种各样的去马赛克算法中&#xff0c;选择最佳的一种。 Abstract 本文提出了一种方法&…

活动预告 | CCF开源发展委员会开源供应链安全技术研讨会(2025第一期)——“大模型时代的开源供应链安全风控技术”...

点击蓝字 关注我们 CCF Opensource Development Committee CCF开源发展委员会开源供应链安全工作组&#xff08;以下简称CCF-ODC-OSS&#xff09;将于1月17日下午在北京黄大年茶思屋举行2025年第一期开源供应链安全技术研讨会&#xff0c;此次研讨会主题为“大模型时代的开源供…

centos 8 中安装Docker

注&#xff1a;本次样式安装使用的是centos8 操作系统。 1、镜像下载 具体的镜像下载地址各位可以去官网下载&#xff0c;选择适合你们的下载即可&#xff01; 1、CentOS官方下载地址&#xff1a;https://vault.centos.org/ 2、阿里云开源镜像站下载&#xff1a;centos安装包…

关于Profinet 从站转 EtherNet/IP 从站网关详细说明

一、产品概述 1.1 产品用途 本产品是 PN(Profinet) 和 EtherNet/IP 网关&#xff0c;使用数据映射方式工作。 本产品在 PN 侧作为 PN IO 从站&#xff0c;接 PN 主站设备&#xff0c;比如西门子 PLC 等&#xff1b;在EtherNet/IP 侧做为 EtherNet/IP 从站&…

【SH】Xiaomi9刷Windows10系统研发记录 、手机刷Windows系统教程、小米9重装win10系统

文章目录 参考资料云盘资料软硬件环境手机解锁刷机驱动绑定账号和设备解锁手机 Mindows工具箱安装工具箱和修复下载下载安卓和woa资源包第三方Recovery 一键安装Windows准备工作创建分区安装系统 效果展示Windows和Android一键互换Win切换安卓安卓切换Win 删除分区 参考资料 解…

企业服务-团队协作相关平台极简介绍

前言 最近&#xff0c;为一家企业做咨询&#xff0c;该公司主要从事地产行业&#xff0c;老板李总招了几名研发人员&#xff0c;想着开发自己的行业APP&#xff0c;但是3年了&#xff0c;产品一直拿不出手&#xff0c;按李总的说法&#xff0c;产品还是很不成熟&#xff0c;但…

怎么防止SQL注入攻击

引言 SQL注入攻击是黑客对数据库进行攻击的常用手段之一&#xff0c;随着B/S模式应用开发的发展&#xff0c;使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验参差不齐&#xff0c;相当大一部分程序员在编写代码的时候&#xff0c;没有对用户输入数据…

一文说清楚Linux gdb

以下是关于 GDB&#xff08;GNU Debugger&#xff09; 的详细介绍&#xff1a; 什么是 GDB&#xff1f; 定义 GDB&#xff08;GNU Debugger&#xff09;是 GNU 项目开发的一款功能强大的调试工具&#xff0c;用于调试 C、C、Fortran 等语言编写的程序。它允许开发者执行程序时…

api开发及运用小红书笔记详情api如何获取笔记详情信息

item_get_video-获得某书笔记详情 smallredbook.item_get_video 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,i…

蓝桥杯第二天学习笔记

二维码生成&#xff1a; import qrcode from PIL import Image, ImageDraw, ImageFont import osdef generate_custom_qr_code(data, qr_file_path, logo_file_pathNone, textNone):# 创建QRCode对象qr qrcode.QRCode(version1,error_correctionqrcode.constants.ERROR_CORRE…

Springboot和Es整合

说明&#xff1a;本文章主要是简单整合和简单增删改查。 1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…

stack_queue的底层,模拟实现,deque和priority_queue详解

文章目录 适配器Stack的模拟实现Queue的模拟实现vector和list的对比dequedeque的框架deque的底层 priority_queuepriority_queue的使用priority_queue的底层仿函数的使用仿函数的作用priority_queue模拟实现 适配器 适配器是一种模式&#xff0c;这种模式将类的接口转化为用户希…

基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用-以ENSO预测为例讲解

1. 背景与目标 ENSO&#xff08;El Nio-Southern Oscillation&#xff09;是全球气候系统中最显著的年际变率现象之一&#xff0c;对全球气候、农业、渔业等有着深远的影响。准确预测ENSO事件的发生和发展对于减灾防灾具有重要意义。近年来&#xff0c;深度学习技术在气象领域…

网络安全概述

在早期的互联网&#xff08;也是一种计算机网络&#xff09;中数据都是明文传输的&#xff0c;例如直接使用http协议。但由于越来越多的商业和政府的数据也都在互联网传输&#xff0c;直接使用明文传输&#xff0c;相当于让数据在网络中裸奔&#xff0c;而且网络中攻击者可以直…

39.【4】CTFHUB web sql 布尔注入

进入靶场 按照提示输入1 布尔注入只显示正确与否&#xff0c;手动注入太麻烦,用sqlmap -dbs爆出库名 -tables爆出表名 -columns 爆出字段名 --dump得到flag 笔记 1&#xff0c;sqlmap使用步骤 -dbs 爆出表名 -tables爆出库名 -columns爆出字段名 --dump爆出字段内容 2&a…

C#中通道(Channels)的应用之(生产者-消费者模式)

一.生产者-消费者模式概述 生产者-消费者模式是一种经典的设计模式&#xff0c;它将数据的生成&#xff08;生产者&#xff09;和处理&#xff08;消费者&#xff09;分离到不同的模块或线程中。这种模式的核心在于一个共享的缓冲区&#xff0c;生产者将数据放入缓冲区&#x…