js实现甘特图

JavaScript多功能甘特图组件 - jsGantt jsGantt是一个可定制的、灵活的、多语言的甘特图组件,由原生 JavaScript 构建。它使用客户端渲染以获得快速的性能和动态的交互性。非常适用于任何需要交互式时间线或时间表显示的项目。 阅读详情

 <script   language=javascript>  
  /**  
    *   Title:                 甘特图  
    *   Description:     Javascript中使用表格实现甘特图  
    *   Copyright:         Copyright   (c)   2002  
    *   Company:             weide  
    *   @author               weidegong  
    *   @version             1.0  
    *   evaluation:       用表格实现不可行,准备使用SVG~~  
  **/  
  function   gante(){  
  //定义公用属性  
  this.Data;  
  this.Head=['编号','任务名称','负责人','开始时间','结束时间'];  
  this.toShow;  
  this.StartDate=new   Date();  
  this.EndDate=new   Date();  
  this.DayWidth=6;  
   
  //定义私有属性  
  var   dateMain;//主要时间  
  var   dateSub;//次要时间  
   


   this.setDate=initDate;  
  this.getShow=drawingGante;  
   
  //定义方法  
                  function   initDate(){  
                      var   start=new   Date(),end=new   Date(),t;  
                      for(var   rs   in   this.Data){  
                          for(var   i=3;i<=4;i++){  
                              t=getStrDay(this.Data[rs][i]);  
                              if(t.getTime()>end.getTime())   end=t;  
                              if(t.getTime()<start.getTime())start=t;  
                          }  
                      }  
   
                      this.StartDate=start;  
                      this.EndDate=end;  
    
                  }  
   
       //定义方法   ,画干特图
  function   drawingGante(){  
                                  var     outxt=""  
  outxt+="<table     border=1     width=100%     cellspacing=1     cellpadding=0   bordercolor=#000000>"  
  outxt+="<tr><th   align=center><font     color=#FFFFFF>甘特图</font></th></tr><tr><th><table     border=0     width=100%     cellspacing=1     cellpadding=0>"  
   
  //输出表头  
  outxt+="<tr>";  
  for(var   obj   in   this.Head)  
  outxt+="<td   nowrap>"+this.Head[obj]+"</td>";  
   
  //输出坐标系  
  outxt+="<th><table     border=0     width=100%     cellspacing=1     cellpadding=0>";  
   
  outxt+="<tr><th>"+showYearMonth(this.StartDate,this.EndDate,this.DayWidth)+"</th></tr>";  
   
  outxt+="</table></th>"  
   
  //输出数据内容  
  for(var   rs   in   this.Data){  
  outxt+="<tr>"  
  for(var   fd   in   this.Data[rs]){  
  outxt+="<td   nowrap>"+this.Data[rs][fd]+"</td>"  
  }  
   
  //生成甘特图  
  outxt+="<td>"  
   
  var   tBegin=getStrDay(this.Data[rs][3]);  
  var   tEnd=getStrDay(this.Data[rs][4]);  
  //alert(tBegin.toLocaleString()+"-->"+tEnd.toLocaleString());continue;  
  outxt+=setMonthShow(this.StartDate,this.EndDate,this.DayWidth,tBegin,tEnd   );   //this.StartDate,this.EndDate:干特图起始时间          ,tBegin,tEnd:当前任务起始时间,this.DayWidth:6
   
  outxt+="</td>"      
  outxt+="</tr>"  
  }  
   
   
  outxt+="</table></th></tr></table>"  
  return   outxt;  
  }  
   
  }  
   
  ///  把时间到精确到毫秒
  function   getStrDay(value){  
  var   arrDate   =   value.split("-");  
  var   dateOK   =   new   Date(arrDate[0],arrDate[1]-1,arrDate[2],0,0,0,0);  
  return   dateOK;  
  }  
 
 
 ///计算两个日期之间相差毫秒数
  function   getDays(day1,day2){  
  var   days=0;  
  try{  
  days=(day1.getTime()-day2.getTime())/(1000*24*3600)  
  if(days<0)   days=-days;  
  }catch(e){}  
   
  return   days;  
  }  
   
 //主要函数之一  
  function   setMonthShow(start,end,width,tBegin,tEnd){  
  var   show="<table     border=1         cellspacing=0   bordercolor=#F89807     cellpadding=0   style=/"height:100%;width:100%;word-break:break-all/"><tr>";  
  var   dateCur=start;  
  var   dateNext;//下一个时间  
  var   widthTD;  
  var   bFlag=0;  
  var   styleGante="   style=/"color:#000;background-color:#00007f/"   ";  
  while(1){  
  dateNext=getNextMonth(dateCur);  
  if(dateNext.getTime()>end.getTime())   dateNext=end;  
  widthTD=getDays(dateCur,dateNext)*width;  
   
  var   setColor="";  
   
  if(   isIn(dateCur,tBegin,tEnd)   ){  
  setColor+="   style=/"color:#000;background-color:#00007f/"   ";  
  //任务开始处  
  if(bFlag++==0){  
  var   monthStart=new   Date(dateCur.getYear(),dateCur.getMonth(),1   );  
  var   tmp=getDays(monthStart,dateCur)*100/30;  
  show+="<td   width="+widthTD+"px>"  
  show+="<table     height=100%   width=100%   border=0><tr><td   width="+tmp+"%></td><td   "+styleGante+"   width="+(100-tmp)+"%></td></tr></table>"  
  show+="</td>"  
  }else   if(dateCur.getYear()==tEnd.getYear()   &&   dateCur.getMonth()==tEnd.getMonth()   ){  
   
                                                  //任务结束处  
  dateCur=tEnd;  
  var   monthStart=new   Date(dateCur.getYear(),dateCur.getMonth(),1   );  
  var   tmp=getDays(monthStart,dateCur)*100/30;  
  show+="<td   width="+widthTD+"px>"  
  show+="<table     height=100%   width=100%   border=0><tr><td     "+styleGante+"   width="+tmp+"%></td><td   width="+(100-tmp)+"%></td></tr></table>"  
  show+="</td>"  
  }else{  
  show+="<td   width="+widthTD+"px   "+   styleGante   +   "></td>"  
  }  
  }else{  
  show+="<td   width="+widthTD+"px   >&nbsp;</td>"  
  }  
   
  //show+="<td   width="+widthTD+"px   "+   setColor   +   "></td>"  
   
  if(dateNext.getTime()==end.getTime())break;  
  dateCur=dateNext;  
  }  
   
  show+="</tr></table>"  
   
  return   show;  
  }  
 
  ///画年份表格和月份表格
 ///width=6
 ///调getMonthShow画月份表格
  function   showYearMonth(start,end,width){  
  var   show="<table     border=0         cellspacing=1   width=100%   cellpadding=0   height=100%   width=100%><tr>";  
  var   dateCur=start;  
  var   dateNext;//下一个时间  
  var   widthTD;  
  while(dateCur.getYear()<=end.getYear()){  
  if(dateCur.getYear()==end.getYear())   dateNext=end;  
  else  
  dateNext=new   Date((dateCur.getYear()+1),0,1);  
   
  widthTD=getDays(dateCur,dateNext)*width;  
  show+="<td   width="+widthTD+"px>";  
   
  show+="<table   border=/"1/"   cellspacing=/"0/"     width=100%   height=100%   bordercolor=#F89807><tr><td>"+dateCur.getYear()+"</td></tr>";  
  show+="<tr><td>"+getMonthShow(dateCur,dateNext,width)+"</td></tr>";  
  show+="</table>";  
   
  show+="</td>"  
   
  if(dateCur.getYear()==dateNext.getYear())   break;  
  dateCur=dateNext;  
   
  }  

  show+="</tr></table>"  
  return   show;  
  }  
   
  function   getYearShow(start,end,width){  
  var   show="<table     border=1         cellspacing=0     bordercolor=#F89807   cellpadding=0   style=/"height:100%;width:100%/"><tr>";  
  var   dateCur=start;  
  var   dateNext;//下一个时间  
  var   widthTD;  
  while(dateCur.getYear()<=end.getYear()){  
  if(dateCur.getYear()==end.getYear())   dateNext=end;  
  else  
  dateNext=new   Date((dateCur.getYear()+1),0,1);  
   
  widthTD=getDays(dateCur,dateNext)*width;  
  show+="<td   width="+widthTD+"px>"+dateCur.getYear()+"</td>"  
   
  if(dateCur.getYear()==dateNext.getYear())   break;  
  dateCur=dateNext;  
   
  }  
   
  show+="</tr></table>"  
  return   show;  
  }  
  
  ///画月份表格
 ///width=6
  function   getMonthShow(start,end,width,type){  
  var   show="<table     border=1         cellspacing=0   bordercolor=#F89807   height=100%   width=100%   cellpadding=0   style=/"word-break:break-all/"><tr>";  
  var   dateCur=start;  
  var   dateNext;//下一个时间  
  var   widthTD;  
  while(1){  
  dateNext=getNextMonth(dateCur);  
  if(dateNext.getTime()>end.getTime())   dateNext=end;  
  widthTD=getDays(dateCur,dateNext)*width;  
   
  var   nMonth=dateCur.getMonth();  
  if(nMonth==11)   nMonth=12;  
  else   nMonth++;  
   
  show+="<td   width="+widthTD+"px>"+nMonth+"</td>"  
   
  if(dateNext.getTime()==end.getTime())break;  
  dateCur=dateNext;  
  }  
  show+="</tr></table>"  
  return   show;  
  }  
   
 ///获取下个月开始日期
  function   getNextMonth(dateCur){  
  var   next;  
  var   nMonth=dateCur.getMonth();  
  if(nMonth==11){  
  next=new   Date((dateCur.getYear()+1),0,1)  
  }else{  
  next=new   Date(dateCur.getYear(),(dateCur.getMonth()+1),1)  
  }  
  return   next;  
  }  
 
 ///判断日期是否在任务开始时间与结束时间之内
  function   isIn(cur,begin,end){  
      for(var   i=1,t=cur;t.getMonth()==cur.getMonth();i++){  
          t=new   Date(cur.getYear(),cur.getMonth(),i);  
          if(t.getTime()>begin   &&   t.getTime()<end)   return   true;  
      }  
      return   false;  
  }  
  </script>  
   


  <html>  
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  <title>甘特图</title>  
   
  <style>  
  th{color:#FFF;background-color:#F89807;}  
  td{color:#000;background-color:#FDEDCC;height:16}  
  input,textarea,th,td{font-size:9pt}  
  </style>  
   
  <script   language=javascript   src="/comDB/gante.js"></script>  
  </head>  
  <body   onload="show.innerHTML=gt.getShow()">  
  <script   language=javascript>  
  var   gt=new   gante();  
   
  gt.Data=[[1,2,3,'2002-1-1','2002-2-8'],[2,3,4,'2002-3-4','2002-10-20']];  
   
  gt.setDate();  
  </script>  
   
  <div   id=show></div>  
   
  </body>  
  </html>  
   
 

基于JS实现简单甘特图 基于JS实现简单甘特图 最近同事求助到一个小小的需求,写一个时间甘特图,主要想表现一个车在一天的不同的时间点里,停靠的站点, 先来看一下效果吧,这里的需求是从早上的5点为开始时间,到第二天到凌晨5点 前期准备 其实网上有很多甘特图的实现方式,但是他们都只能具象到天,不能具体到某个时间点,而且每一个具体的时间段中的描述是不能自定义的,所以准备自己写一下了。 实现逻辑 我们可以先模拟一些demo... 阅读详情

相关推荐

在前端实现甘特图的方法探索

甘特图是一种常用于项目管理和进度跟踪的图表,它以时间为轴展示任务的开始和结束时间,并以条形表示任务的持续时间。通过在前端开发中实现甘特图,我们可以有效地展示任务的时间安排和进度,提供更直观的项目管理工具。通过以上步骤,我们已经成功地在前端实现了一个简单的甘特图。除了基本的任务安排和时间轴展示外,SpreadJS 还提供了丰富的功能和选项,例如任务的依赖关系、资源分配和进度更新等。总结起来,通过使用 SpreadJS 库,我们可以轻松地在前端实现甘特图,为项目管理和进度跟踪提供强大的工具和可视化效果。

GmhVue的博客 604

苦苦寻找的原生JS甘特图,终于找到啦

在项目管理中,甘特图的可视化操作界面,可以让项目规划与风险把控更便捷与清晰,同时该插件是一款基于HTML5、原生javasrcipt的一款js插件,支持在当前主流的前端框架中无缝接入使用,项目管理系统必备。

adamlee520的博客 7328

全JavaScript实现的甘特图指南

简介:纯JavaScript甘特图是一种Web图表,用于展示项目时间线和进度,无需依赖外部库如jQuery。它由多个条形图组成,代表任务的开始和结束时间,适用于项目管理、任务调度。实现甘特图需要掌握关键知识点:数据结构设计、DOM操作、布局计算、事件处理、动画效果、时间轴绘制以及提供可扩展性和自定义选项。同时,还需要考虑性能优化、兼容性和响应式设计。

weixin_35950531的博客 1461

大叔程序员,纯JS开发的甘特图插件

MZGantt是一款纯js开发的甘特图插件,可以快速应用于您的web项目。支持拖拽编辑,支持列自定义,支持多段展示,支持自定义日历,样式可调,使用简单,可参数化配置,并提供丰富配置参数和接口满足项目需求

alistguy的博客 4600

深入探索JavaScript甘特图组件的实现与应用

任务对象是构成任务管理软件的基础,每一个任务都是一个独立的对象。任务对象通常包含以下基本属性:id: 唯一标识一个任务。name: 任务的名称,用于在用户界面上展示。: 任务的描述,详细说明任务内容。duration: 任务预计需要的时间。startDate: 预计开始日期。endDate: 预计结束日期。status: 任务当前的状态,如:未开始、进行中、已完成等。

weixin_29885875的博客 1001

13个js版gantt甘特图控件集合

13个js版gantt甘特图控件集合

甘特图(Javascript实现)

简介 笔者在开发一个基于Web的应用程序提供对人物和项目事件的管理。项目需要一个甘特图控件可视化表示任务列表,笔者尝试寻找自由可用的解决方案(因为不想增加开销)。笔者找到了一些例子,不过并不满意。于是,决定创建一个自己的甘特图控件。此次是笔者工作的最初成果。这个SIcon的最初版本只做了几个小时,所以仍会有些问题。尽管如此,笔者还是希望与各位分享,希望能帮助大家。 SICon现在支持F

4291

芯片测试中的DC与AC模式详解:如何选择最适合你的测试方案?

本文深入解析了芯片测试中DC(直流)与AC(交流)模式的核心差异与互补性。DC测试关注静态电气特性,如固定型故障;而AC测试则聚焦于芯片在额定工作速度下的动态时序行为。文章从VLSI设计、电路模块、成本约束、可测试性设计和应用场景五大维度,提供了如何根据工艺节点、工作频率及具体需求,在testMode配置、时钟复位策略和输入输出接口设计中,平衡两种测试模式以制定最优方案的决策框架。

bb456的博客 1086

PHP+Javascript 实现甘特图

选择工厂、年份、月份生成甘特图 Gantt.blade.php <link rel="stylesheet" href="{{ \Illuminate\Support\Facades\URL::asset('common/common.css') }}"> <link rel="stylesheet" href="{{ \Illuminate\Support\Facades\URL::asset('vendor/myGantt/dhtmlxgantt.css?v=7.0.3') }}"&.

懒虫的博客 1138

开源网格生成利器Gmsh:从入门到二次开发实战指南

本文详细介绍了开源网格生成工具Gmsh,从基础概念、安装配置到核心功能实战,提供了全面的入门指南。重点阐述了其强大的二次开发能力,通过Python API实现参数化建模、边界层网格生成以及与FEniCS、OpenFOAM等求解器的集成,为有限元分析和计算流体力学仿真提供灵活高效的自动化网格划分解决方案。

weixin_29066781的博客 434

Dinic算法的复杂度分析及证明

一般图 复杂度主要取决于dfs增广的过程。 将dfs部分的复杂度分成两部分来分析:1)修改增广路上边的流量。至多会增广mmm次,一条增广路的长度至多是nnn,所以这一部分的复杂度是O(nm)O(nm)O(nm)。2)dfs遍历时找增广路失败时经过的边。由于一旦从某条边出发找最短路失败了,我们就不会再走那条边(当前弧优化),所以这一部分的复杂度是O(m)O(m)O(m)的。故而dfs增广的复杂度是O...

这个博客已经搬到了:zhongyuwei.github.io 4392

重生之--js原生甘特图实现

一个树形结构,根据子节点的时间范围显示显示进度 ,不同的时间范围对应不同的颜色。首先要计算所有节点的 最大时间和最小时间。然后再计算每个甘特图的宽度。数据类型大概是这个样子的。

ping 562

【Autosar COM】Marvell 88Q5050 以太网交换机驱动技术解析

本驱动实现了对Marvell 88Q5050交换机的全面控制,通过模块化设计满足AUTOSAR规范要求。增加DMA加速机制提升大数据量处理性能实现TSN(时间敏感网络)特性支持引入异步通知机制替代轮询操作增强安全特性,如MACsec支持该驱动架构为车载以太网交换机控制提供了可靠基础,其设计思想可推广到其他车载网络控制器开发中。随着车载网络技术的演进,驱动需持续迭代以支持新特性与更高通信速率需求。

1450

JavaScript实现的甘特图组件

JavaScript实现的甘特图组件 去发现同类优质开源项目:https://gitcode.com/ 简介 此仓库包含一个使用JavaScript开发的甘特图组件,它具有丰富的功能和高度的实用性。该组件能够帮助用户以直观的方式展示项目的时间规划和进度管理。 功能 动态数据绑定:组件支持与动态数据源绑定,使得甘特图能够实时反映项目进度变化。 交互操作:提供拖拽、缩放等交互功能,方便用户调整任务时...

gitblog_06739的博客 452

把 ABAP SQL 窗口函数讲透:从 OVER 到 LEAD、RANK 与累计分析

ABAP SQL窗口函数在不丢失明细记录的前提下,为每行数据提供组内统计和排名功能。它通过OVER子句定义计算窗口,支持三类函数:聚合型(AVG/SUM等)、排名型(ROW_NUMBER/RANK等)和取值型(LEAD/LAG)。相比GROUP BY会合并多行数据,窗口函数保留原始记录同时附加计算结果,特别适合需要保留明细又要展示统计信息的业务场景,如销售排名、客户分层分析等。语法核心是OVER子句,通过PARTITION BY分组,ORDER BY排序,可灵活定义计算范围。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1274

SAN存储与协议,了解SCSI、FC和ISCSI

在前面我们介绍SAN存储及iSCSI协议的时候了解到SAN存储其实是一个CS架构的系统。存储系统本身就是整个系统的服务端。以IP-SAN(也就是基于iSCSI的SAN存储)为例,其整体架构如图1所示。 图1 CS架构 对于存储系统来说,通常是由专业的存储厂商提供,比较知名的如EMC、NetAPP、IBM和日立等等。国内存储厂商也迅速崛起,比较知名的如华为、宏杉、浪潮和同友等等。另外,还有一些小的存储厂商,他们往往集中在某个领域,比如专注文件系统或者块存储等等。 除了专业的存储设备外,其实Linux

shuningzhang的专栏 2685

使用JQuery、js的实现甘特图

1. JQuery plugin  jQuery.ganttView jQuery.ganttView plugin is a very lightweight plugin for creating a Gantt chart in plain HTML...no vector graphics or images required. The plugin supports draggi

技术心得总结 1万+

〔重庆理工大学〕计算机组成原理课设报告--16位单周期CPU设计

本课程设计的实验平台为Altera Quartus II 软件和Altera Cyclone V Starter 工具箱。(1)Cyclone V是Altera FPGAs家族的一类,它面向低功耗应用。Cyclone V GX 5CGXFC5C6F27C7N 芯片有不同的转换器,按钮,LED灯,七段显示器,HDMI接口,SD卡读卡器以及其他链接等。Cyclone V GX 5CGXFC5C6F27C7N是Starter工具箱的重要组件。(2)测试台包含在测设备(DUT)和用于仿真的模拟输入。

Pretty Boy Fox的博客 1066

PHP JS echarts 实现甘特图

1、引入js文件: <script type="text/javascript" src="jQuery存放路径/jquery.min.js"></script> <script type="text/javascript" src="echarts存放/echarts.min.js"></script> 2、存放甘特图的容器 <div id="container"></div><!--其他样式自行加上即可--> ...

懒虫的博客 1244

【GlobalMapper精品教程】070:专题地图制作完整操作教程

与其它GIS软件一样,Globalmapper也可以制作出漂亮的地图,本文讲解专题地图制作完整操作流程。

智慧空间实验室 3752

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

JavaScript实现的甘特图组件:项目管理利器

JavaScript实现的甘特图组件:项目管理利器 去发现同类优质开源项目:https://gitcode.com/ 项目核心功能/场景 直观展示项目时间规划与进度管理。 项目介绍 在项目管理领域,甘特图是一种不可或缺的工具,它能帮助项目管理者清晰掌握项目的时间线和进度状态。今天,我们介绍一个使用JavaScript开发的甘特图组件,这个组件不仅具有高度的可定制性,还具备动态数据绑定和丰富的交互功...

gitblog_06719的博客 350

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

最优的JS甘特图插件【转载】

甘特图

meteorites的博客 4528

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

原生JS甘特图插件MZGantt:多选下拉列表实现详解

摘要:MZGantt实现多选下拉列表需在列定义中配置type: "DropDownList"和multiSelect: true属性,选项数据需为包含value和text的对象数组。前端渲染时下拉框会显示多选标记和已选项样式,适用于需要多选的业务场景。详细配置可参考MZGantt官网文档。(98字)

alistguy的博客 73

基于JS简单甘特图

基于JS简单甘特图 最近同事求助到一个小小的需求,写一个时间甘特图,主要想表现一个车在一天的不同的时间点里,停靠的站点, 先来看一下效果吧,这里的需求是从早上的5点为开始时间,到第二天到凌晨5点 前期准备 其实网上有很多甘特图的实现方式,但是他们都只能具象到天,不能具体到某个时间点,而且每一个具体的时间段中的描述是不能自定义的,所以准备自己写一下了。 实现逻辑 我们可以先模拟一些demo数据...

weixin_34220834的博客 2201

如何快速实现交互式JavaScript甘特图:Frappe Gantt完全指南

Frappe Gantt是一款轻量级、现代化的开源JavaScript甘特图库,专为Web应用设计。它提供直观的项目时间线可视化,支持任务拖拽、进度调整和交互式操作,帮助开发者轻松构建专业的项目管理界面。无论是小型团队协作工具还是企业级项目管理系统,Frappe Gantt都能提供高效的时间线展示解决方案。 ## 📊 什么是Frappe Gantt? Frappe Gantt(项目路径:gh

gitblog_00844的博客 1025

el-table甘特图

【代码】el-table甘特图。

qq_42635594的博客 226
上一篇: Request获取url信息
下一篇: Javascript中最常用的55个经典技巧
haitun0921
博客等级 码龄21年 9粉丝 4原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值