DHTMLX Gantt 甘特图自定义样式

本文详细介绍了如何使用CSS定制甘特图的任务线、里程碑、选中列背景色等样式,并通过JS配置行高、表头高度及滚动条宽度,实现甘特图的个性化展示。

CSS:

  /* 任务线 */
  .gantt_task_line{
    height: 16px !important;
    line-height: 16px !important;
    margin-top: 8px;
    border: none !important;
  }
  /* 里程碑 */
  .gantt_task_line.gantt_milestone{
    width: 30px !important;
    height: 30px !important;
    border: none !important;
    background-color: inherit !important;
    background-size: cover;
  }
  /* 里程碑icon */
  .gantt_task_line.gantt_milestone .gantt_task_content{
    margin-top: -8px;
    transform: rotate(0deg) !important;
    background-image: url('iconURL') !important;
  }
  /* 左侧悬浮单元格背景色 */
  .gantt_grid_data .gantt_row.odd:hover, .gantt_grid_data .gantt_row:hover{background-color: aquamarine !important;}
  /* 选中一列背景色 */
  .gantt_grid_data .gantt_row.gantt_selected, .gantt_grid_data .gantt_row.odd.gantt_selected, .gantt_task_row.gantt_selected{background-color: aquamarine !important;}
  /* 选中一列每个单元格右border颜色 */
  .gantt_task_row.gantt_selected .gantt_task_cell{border-right-color: aquamarine !important;}

	/* 任务名前的logo */
  .gantt_tree_icon.gantt_file, .gantt_tree_icon.gantt_folder_open, .gantt_tree_icon.gantt_folder_closed{width: 10px; background-image: none;}
  .gantt_tree_content{overflow: hidden;text-overflow: ellipsis;}

	/* 标记线 */
	.gantt_marker{background-color: brown;opacity: .4;}

js配置:

// 4.1 甘特图的行高
gantt.config.row_height = 30;
// 4.2 甘特图的表头高度
gantt.config.scale_height = 40;
// 4.3 设置滚动条宽/高度
gantt.config.scroll_size = 10;

滚动条样式:

/*滚动条整体样式*/
  .gantt-wrapper ::-webkit-scrollbar {
    width: 14px;  /*宽分别对应竖滚动条的尺寸*/
    height: 6px;  /*高分别对应横滚动条的尺寸*/
  }

  /*滚动条里面轨道*/
  .gantt-wrapper ::-webkit-scrollbar-track {
    background-color: rgba(0,0,0,.2);
  }
  /*滚动条里面拖动条*/
  .gantt-wrapper ::-webkit-scrollbar-thumb {
    background-color: rgba(0,0,0,.5);
    border-radius: 5px;
  }
### 如何在 dhtmlx-gantt 中实现多任务同行显示 要在 `dhtmlx-gantt` 中实现一行显示多个任务的功能,可以通过自定义配置来调整默认行为。以下是具体的方法以及其实现细节: #### 自定义布局以支持多任务同行 通过设置 `task_height` 和 `scale_unit` 属性可以控制每行的高度和时间刻度单位[^1]。为了在同一行中显示多个任务,需要修改数据结构并利用 CSS 或 JavaScript 来动态渲染。 ```javascript // 初始化 Gantt 图表 gantt.config.task_height = 50; // 设置任务高度以便容纳更多内容 gantt.init("gantt_here"); // 数据模型中的任务对象需包含额外属性用于区分同一行的任务 const tasks = [ { id: 1, text: "Task A", start_date: "2023-10-01", end_date: "2023-10-05", row_id: 1 }, { id: 2, text: "Task B", start_date: "2023-10-03", end_date: "2023-10-07", row_id: 1 } ]; // 使用 custom rendering 方法绘制多任务同行 gantt.attachEvent("onBeforeTaskDisplay", function(task) { const taskElement = gantt.getTaskByTime(task.start_date, task.end_date); if (task.row_id && taskElement) { taskElement.style.left = `${parseInt(taskElement.style.left || &#39;0&#39;) + 10}px`; // 调整位置避免重叠 taskElement.style.backgroundColor = task.color ? task.color : "#f0ad4e"; // 设置颜色[^2] } return true; }); gantt.parse(tasks); // 加载任务数据 ``` 上述代码片段展示了如何通过事件监听器 (`onBeforeTaskDisplay`) 动态调整任务的位置和样式,从而实现在同一行上显示多个任务的效果。 --- #### Vue.js 环境下的集成方式 如果是在基于 Vue 的项目中使用 `dhtmlx-gantt`,则可以参考以下示例代码[^3]: ```vue <template> <div ref="ganttContainer"></div> </template> <script> import gantt from "dhtmlx-gantt"; export default { mounted() { this.renderGantt(); }, methods: { renderGantt() { gantt.config.scale_unit = "day"; gantt.config.date_scale = "%D %M %Y"; gantt.config.task_height = 50; gantt.templates.task_class = function(start, end, task) { return task.row_id === 1 ? "custom-row-class" : ""; // 添加自定义类名 }; gantt.init(this.$refs.ganttContainer); const tasks = [ { id: 1, text: "Task A", start_date: "2023-10-01", end_date: "2023-10-05", row_id: 1 }, { id: 2, text: "Task B", start_date: "2023-10-03", end_date: "2023-10-07", row_id: 1 } ]; gantt.parse(tasks); } } }; </script> <style scoped> .custom-row-class { background-color: rgba(255, 255, 0, 0.5); /* 半透明背景 */ } </style> ``` 此代码片段演示了如何在 Vue 组件中初始化 `dhtmlx-gantt` 并应用自定义样式来处理多任务同行的情况。 --- #### 注意事项 1. **性能优化**:当任务数量较多时,建议启用虚拟滚动功能以提高渲染效率。 2. **冲突检测**:为了避免视觉上的混乱,应确保不同任务的颜色有所区别。 3. **交互体验**:对于复杂的甘特图场景,推荐提供拖拽分组或过滤选项给用户。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值