翻譯|使用教程|編輯:吉煒煒|2025-01-15 11:36:03.853|閱讀 106 次
概述:本教程將展示如何使用進度線補充JavaScript 甘特圖,以便于監(jiān)控項目進度。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
DHTMLX Gantt是用于跨瀏覽器和跨平臺應(yīng)用程序的功能齊全的Gantt圖表。可滿足項目管理應(yīng)用程序的所有需求,是最完善的甘特圖圖表庫。
今天,您將學(xué)習(xí)如何使用進度線補充JavaScript 甘特圖,以便于監(jiān)控項目進度。
什么是進度線,以及它如何為甘特圖帶來好處
在復(fù)雜的甘特圖場景中,項目團隊成員或利益相關(guān)者可能難以及時準確地估計多個任務(wù)的當(dāng)前狀態(tài)。這時進度線就派上用場了。它是一種曲線形式的視覺指示器,顯示任務(wù)相對于其計劃時間表的當(dāng)前狀態(tài)。這條線源于當(dāng)前日期,指示每個任務(wù)的進度,為團隊提供項目狀態(tài)的清晰視覺摘要。此功能還可以幫助項目團隊快速了解是否需要進行任何調(diào)整,而無需深入了解詳細數(shù)據(jù)。
總體而言,最終用戶可以從進度線的實施中獲得以下好處:
因此,此功能可幫助項目團隊在項目管理工作流程中保持清晰度和良好的時間安排。
以下是使用 DHTMLX 構(gòu)建的帶有進度線的甘特圖示例:
使用進度線補充 DHTMLX 甘特圖的指南
DHTMLX Gantt 默認不提供進度線功能,但可以通過 Gantt API 輕松將其添加到 Gantt 配置中。
從編碼角度來看,進度線是一個自定義元素,可以使用addTasklayer()方法顯示在甘特圖時間軸中。此方法會針對包含任務(wù)的每一行調(diào)用,這意味著您可以分段添加進度線。
如果任務(wù)在當(dāng)前日期之前開始并完成,或者任務(wù)的進度狀態(tài)為 0% 并在當(dāng)前日期之后開始,則需要添加一條直線。如果任務(wù)進度從 0 到 100%,則繪制兩條與當(dāng)前日期和任務(wù)進度相關(guān)的線。可以使用 SVG 完成。您需要三個進度線坐標(biāo):
首先,您需要使用posFromDate()方法來獲取任務(wù)在時間軸上的開始和結(jié)束日期的位置。
const startPos = gantt.posFromDate (任務(wù).開始日期) ; const endPos = gantt.posFromDate (任務(wù).結(jié)束日期) ;
此后,您將獲得當(dāng)前日期的位置。
const linePos = gantt.posFromDate (今天) ;
接下來,計算任務(wù)開始日期和結(jié)束日期的位置差,并將其乘以任務(wù)進度。結(jié)果,您將獲得任務(wù)進度日期。
const progressOffset = ( endPos - startPos ) * task.progress ; const progressPos = startPos + progressOffset ;
要獲取任務(wù)欄的坐標(biāo),您應(yīng)該使用getTaskPosition()方法。
const大小= gantt.getTaskPosition (任務(wù),任務(wù)。開始日期,任務(wù)。結(jié)束日期) ;
現(xiàn)在您可以創(chuàng)建一個 SVG 元素并添加必要的屬性。高度參數(shù)取自任務(wù)坐標(biāo)(整行的高度),而寬度參數(shù)則是繼承的。位置使用頂部和左側(cè)樣式指定。SVG 元素將占據(jù)時間軸中的整個任務(wù)行。
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 ; ` ) ;
之后,創(chuàng)建繪制線條所需的路徑元素并添加屬性。
const path = document.createElementNS ( svgNS ,"path" ) ; path.setAttribute ( "stroke" ,"black" ) ; path.setAttribute ( "stroke-width" ," 2" ) ; path.setAttribute ( "fill " ," none " ) ;
下一步是計算線條的坐標(biāo)。對于那些從未使用過 SVG 元素的人,我們想澄清一下路徑坐標(biāo)中使用的幾個符號:
坐標(biāo)按以下順序指定:
const startPoint = `M$ { linePos } , 0 ` ; const middlePoint = ` L $ { progressPos } , $ { size.rowHeight / 2 } ` ; const endPoint = `L $ { linePos } , $ { size.rowHeight } ` ;
此時需要檢查任務(wù)的日期和進度,如果任務(wù)在當(dāng)前日期之前開始且進度為 100%(即 1),或者在當(dāng)前日期之后開始且進度大于 0,則表示任務(wù)仍在進行中,此時需要從任務(wù)進度中畫兩條線,如果不滿足上述條件,則畫一條線,即第二個坐標(biāo)被簡單排除。
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%) }
讓我們澄清一下上面這段代碼中使用的參數(shù):
就是這樣。上面的說明將幫助您使用像我們的示例一樣的自定義進度線來豐富您的 JavaScript 甘特圖。
總結(jié)
總的來說,能夠輕松地將進度線等簡單但實用的功能添加到甘特圖真是太好了。此功能使最終用戶能夠看到他們的工作如何與項目時間表保持一致,并在事情沒有按計劃進行時及時采取措施。使用 DHTMLX Gantt,您可以獲得用于實現(xiàn)進度線和許多其他自定義功能的廣泛 API。如果仍有疑問,請下載我們產(chǎn)品的30 天免費試用版并試用。敬請期待 2025 年有關(guān) DHTMLX Gantt 自定義的更多教程。
如需了解更多DHTMLX產(chǎn)品資訊,歡迎咨詢“”!
加入DHTMLX甘特圖控件交流QQ群:764148812,與更多朋友一起溝通探討,提升開發(fā)技能。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)