You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Highcharts甘特图中固定时间线/表头,滚动时保持顶部?

Highcharts甘特图固定时间线/表头实现方案

Highcharts本身没有内置的固定甘特图时间线配置,针对50行任务数据的场景,可通过拆分图表容器+CSS固定+JS同步的方式实现滚动时表头(时间轴)固定在顶部,具体步骤如下:


1. 调整页面容器结构

给图表外层嵌套两个独立容器,分别承载表头(时间轴)和可滚动的任务列表:

<div class="gantt-wrapper">
  <div class="gantt-header" id="gantt-header"></div>
  <div class="gantt-body" id="gantt-body"></div>
</div>

搭配基础CSS实现表头固定和滚动区域限制:

.gantt-wrapper {
  width: 100%;
  position: relative;
}
.gantt-header {
  position: sticky;
  top: 0;
  z-index: 10;
  background: #fff; /* 防止滚动时任务内容穿透 */
  box-shadow: 0 2px 4px rgba(0,0,0,0.1); /* 增强视觉区分 */
  overflow: hidden;
}
.gantt-body {
  max-height: 600px; /* 按需设置滚动区域的最大高度 */
  overflow-y: auto;
}

2. 初始化两个关联的图表实例

分别渲染仅含时间轴的表头图表和仅含任务数据的主体图表,确保两者的时间轴范围、刻度完全一致:

// 表头图表:只显示时间轴,隐藏y轴和任务数据
const headerChart = Highcharts.ganttChart('gantt-header', {
  title: { text: '项目甘特图' },
  xAxis: {
    type: 'datetime',
    min: Date.UTC(2024, 0, 1),
    max: Date.UTC(2024, 5, 30),
    tickInterval: 7 * 24 * 3600 * 1000 // 按周显示刻度
  },
  yAxis: { visible: false }, // 隐藏y轴
  series: [], // 空任务系列
  chart: { margin: [0, 10, 0, 10] } // 消除不必要的边距
});

// 主体图表:显示任务数据,隐藏时间轴和标题
const bodyChart = Highcharts.ganttChart('gantt-body', {
  xAxis: {
    type: 'datetime',
    min: Date.UTC(2024, 0, 1),
    max: Date.UTC(2024, 5, 30),
    tickInterval: 7 * 24 * 3600 * 1000,
    visible: false // 隐藏时间轴,避免重复显示
  },
  yAxis: {
    type: 'category',
    categories: ['任务1', '任务2', '任务3', /* ... 共50个任务 */],
    reversed: true // 甘特图默认需要反转y轴顺序
  },
  series: [{
    name: '项目任务',
    data: [
      { name: '任务1', start: Date.UTC(2024, 0, 1), end: Date.UTC(2024, 0, 10) },
      { name: '任务2', start: Date.UTC(2024, 0, 8), end: Date.UTC(2024, 0, 20) },
      /* ... 剩余48个任务数据 */
    ]
  }],
  title: { enabled: false }, // 隐藏标题,表头已显示
  chart: { margin: [0, 10, 0, 10] } // 和表头保持一致的边距
});

3. 同步表头与主体的时间轴交互

监听主体图表的缩放、拖拽事件,同步更新表头的时间轴范围,保证两者始终对齐:

// 主体图表时间轴缩放/拖拽时,同步表头
bodyChart.events.afterSetExtremes = function(e) {
  headerChart.xAxis[0].setExtremes(e.min, e.max);
};

4. 细节优化

  • 消除容器间隙:给两个图表容器设置padding: 0,避免表头和主体之间出现空白
  • 统一y轴宽度:如果主体图表的y轴(任务名称列)宽度固定,可给表头图表的隐藏y轴设置相同width,保证时间轴对齐
  • 适配响应式:在窗口 resize 时,同步调整两个图表的尺寸,避免错位

内容的提问来源于stack exchange,提问作者CutR68

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:23:09