操作指南
如何切换网格/图表
如果使用默认布局配置,您可以修改 show_grid 或 show_chart 参数,并使用 render() 方法重新绘制变更。
function toggleGrid(){
gantt.config.show_grid = !gantt.config.show_grid;
gantt.render();
}
相关示例 Gantt. Toggle grid (default layout)
function toggleChart(){
gantt.config.show_chart = !gantt.config.show_chart;
gantt.render();
}
相关示例 Gantt. Toggle timeline (default layout)
如果使用自定义布局配置,您需要创建多种布局配置 —— 同时包含网格/时间线和不包含网格/时间线的情况。要在它们之间切换,需要修改 gantt.config.layout 参数并应用 init() 方法以查看变更:
let showGrid = true;
function toggleGrid() {
showGrid = !showGrid;
if (showGrid) {
gantt.config.layout = gridAndChart; // 同时包含网格和时间线的布局
}
else {
gantt.config.layout = onlyChart; // 仅包含时间线的布局
}
gantt.init("gantt_here");
}
相关示例 Gantt. Toggle grid (custom layout)
let showChart = true;
function toggleChart() {
showChart = !showChart;
if (showChart) {
gantt.config.layout = gridAndChart; // 同时包含网格和时间线的布局
}
else {
gantt.config.layout = onlyGrid; // 仅包含网格的布局
}
gantt.init("gantt_here");
}
相关示例 Gantt. Toggle timeline (custom layout)
如何切换资源视图
与前面的用例类似,您需要创建多种布局配置 —— 同时包含资源视图和不包含资源视图。要在它们之间切换,需要修改 gantt.config.layout 参数并应用 init() 方法以查看变更:
let resourceChart = true;
function layoutChange() {
resourceChart = !resourceChart;
if (resourceChart) {
gantt.config.layout = resourceLayout;
}
else {
gantt.config.layout = noresourceLayout;
}
gantt.init("gantt_here");
};
相关示例 Gantt. Toggle resource load diagram
let histogramView = true;
function layoutChange() {
histogramView = !histogramView;
if (histogramView) {
gantt.config.layout = histogramLayout;
}
else {
gantt.config.layout = simpleLayout;
}
gantt.init("gantt_here");
};
相关示例 Gantt. Toggle resource histogram
或者,您也可以通过使用布局视图并重新初始化 Gantt 来查看变更来生成布局:
如何在时间线实现无限滚动
实现无限滚动有多种方式,但在大多数情况下,您需要修改显示的日期范围(gantt.config.start_date 和 gantt.config.end_date 参数):
使用滚动条时
您需要获取 scroll position 并增加日期范围。请注意,过于频繁地重新绘制 Gantt 将影响性能,因此需要在超时后再进行绘制:
gantt.init("gantt_here");
gantt.parse(tasks);
gantt.attachEvent("onGanttScroll", function (left, top) {
const left_date = gantt.dateFromPos(left)
const right_date = gantt.dateFromPos(left + gantt.$task.offsetWidth)
gantt.config.start_date = gantt.config.start_date || gantt.getState().min_date;
gantt.config.end_date = gantt.config.end_date || gantt.getState().max_date;
const min_allowed_date = gantt.date.add(gantt.config.start_date, 1, "day");
const max_allowed_date = gantt.date.add(gantt.config.end_date, -2, "day");
let repaint = false;
if (+left_date <= +min_allowed_date) {
gantt.config.start_date = gantt.date.add(gantt.config.start_date, -2, "day");
repaint = true;
}
if (+right_date >= +max_allowed_date) {
gantt.config.end_date = gantt.date.add(gantt.config.end_date, 2, "day");
repaint = true;
}
if (repaint) {
setTimeout(function () {
gantt.render()
gantt.showDate(left_date)
}, 20)
}
});
相关示例 Gantt. Infinite scroll while using scrollbar
拖动时间线时
您需要获取当前滚动位置,并在时间线起始或结束附近时增加显示的日期范围:
gantt.attachEvent("onMouseMove", function (id, e) {
if (!gantt.getState().drag_id && e.buttons == 1) {
const left_date = gantt.dateFromPos(gantt.getScrollState().x);
const right_date = gantt.dateFromPos(
gantt.getScrollState().x + gantt.$task.offsetWidth - 1
);
if (left_date && +left_date <= +gantt.config.start_date) {
gantt.config.start_date = gantt.date.add(gantt.config.start_date, -1, 'day');
gantt.render();
}
if (right_date && +gantt.config.end_date < +gantt.date.add(right_date, 1, 'day')) {
gantt.config.end_date = gantt.date.add(gantt.config.end_date, 1, 'day');
gantt.render();
}
}
});
相关示例 Gantt. Infinite scroll while dragging the timeline