大佬们,有用过 dhtmlx-gantt 这个组件的吗,现在有这个需求,动态设置右侧单元格的宽度,例如我用不同的月份传值传个11,那么属于11月的单元格宽度设置为40px,而其他月份的单元格宽度为20px。
我使用 gantt.config.min_column_width = 20 // 默认最小列宽,但是这个配置是同一更改时间轴宽度,不能动态,还尝试了用css重写样式虽然宽度改变了,但是任务条失效了
大佬们,有用过 dhtmlx-gantt 这个组件的吗,现在有这个需求,动态设置右侧单元格的宽度,例如我用不同的月份传值传个11,那么属于11月的单元格宽度设置为40px,而其他月份的单元格宽度为20px。
我使用 gantt.config.min_column_width = 20 // 默认最小列宽,但是这个配置是同一更改时间轴宽度,不能动态,还尝试了用css重写样式虽然宽度改变了,但是任务条失效了
由于dhtmlx-gantt的时间轴列宽由scale
配置控制,可通过动态生成scale
配置实现不同月份不同列宽。以下是完整方案:
function generateScaleConfig(month, targetWidth) {
const isTargetMonth = date => date.getMonth() + 1 === month;
return {
unit: "month",
step: 1,
format: date => {
const cssClass = isTargetMonth(date) ? 'custom-month' : '';
return `<div class="${cssClass}">${gantt.templates.month_scale(date)}</div>`;
},
// 动态计算列宽
columnWidth: (date) => isTargetMonth(date) ? targetWidth : 20
};
}
// 使用示例:设置11月宽度为40px
gantt.config.scale = generateScaleConfig(11, 40);
gantt.init("gantt_here");
gantt.render();
关键点说明:
columnWidth
函数动态返回不同宽度(需v7.0+版本支持)format
函数添加自定义CSS类实现样式隔离render()
强制重绘时间轴兼容方案(旧版本可用):
.gantt_custom_col {
min-width: 40px !important;
background: #f5f5f5;
}
gantt.templates.timeline_cell_class = function(item, date) {
return date.getMonth() === 10 ? "gantt_custom_col" : "";
};
gantt.config.min_column_width = 20;
gantt.config.subscales = [{
unit: "month",
step: 1,
format: "%F"
}];
注意事项:
gantt.render()
!important
覆盖默认样式如果遇到任务条错位问题,可尝试在修改配置后调用:
setTimeout(() => gantt.render(), 0);
10 回答10.7k 阅读
7 回答10.8k 阅读
6 回答2.6k 阅读
2 回答11.4k 阅读✓ 已解决
5 回答4.4k 阅读✓ 已解决
4 回答2.7k 阅读✓ 已解决
4 回答11.9k 阅读