DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求,具备完善的甘特图图表库,功能强大,价格便宜,提供丰富而灵活的JavaScript API接口,与各种服务器端技术(PHP,ASP.NET,Java等)简单集成,满足多种定制开发需求。本文给大家讲解DHTMLX Gantt使用 DnD 创建/选择任务,欢迎大家下载最新版试用体验。
DHTMLX Gantt正版试用下载(qun:764148812)https://www.evget.com/product/4213/download
dhtmlxGantt 库提供了一个扩展,其中包括在时间线中处理任务时的高级拖放功能。
总而言之,click_drag扩展允许:
要开始使用扩展,请使用gantt.plugins方法启用click_drag插件。
要启用高级拖放,请指定click_drag配置选项,并在其对象内从下面的列表中设置必要的属性:
gantt.config.click_drag = {
callback: onDragEnd,
singleRow: true
};
您可以将以下事件附加到作为 viewPort 传递的元素(默认情况下为 gantt.$task_data - 带有任务栏的时间轴的一部分):
1、使用拖放创建任务
您可以通过在时间轴上直接拖放来创建任务,方法是单击空白处以设置任务的开始日期并向右拖动以设置其持续时间。
gantt.config.click_drag = { callback: onDragEnd, singleRow: true }; gantt.init("gantt_here"); gantt.parse(tasks); function onDragEnd(startPoint,endPoint,startDate,endDate,tasksBetweenDates,tasksInRow){ if (tasksInRow.length === 1) { var parent = tasksInRow[0]; gantt.createTask({ text:"Subtask of " + parent.text, start_date: gantt.roundDate(startDate), end_date: gantt.roundDate(endDate) }, parent.id); } else if (tasksInRow.length === 0) { gantt.createTask({ text:"New task", start_date: gantt.roundDate(startDate), end_date: gantt.roundDate(endDate) }); } }
相关示例: 通过拖放创建新任务
2、为计划外任务设置时间
click_drag扩展允许使用拖放设置未计划任务的时间。
3、通过拖放选择任务
可以在多种模式下通过拖放来选择任务:日期、行或边界。
gantt.config.multiselect = true; gantt.config.click_drag = { callback: onDragEnd }; gantt.config.autoscroll = true; gantt.config.autoscroll_speed = 50; gantt.init("gantt_here"); gantt.parse(tasks); function onDragEnd(startPoint,endPoint,startDate,endDate,tasksBetweenDates,tasksInRows){ var mode = document.querySelector("input[name=selectMode]:checked").value; switch(mode) { case "1": unselectTasks(); tasksBetweenDates.forEach(function(item) { gantt.selectTask(item.id); }); break; case "2": unselectTasks(); tasksInRows.forEach(function(item) { gantt.selectTask(item.id); }); break; case "3": unselectTasks(); for (var i=0; i
相关示例: 通过拖放选择多个任务
4、创建部分拆分任务
您也可以使用拖放来创建拆分任务的一部分。
gantt.config.click_drag = { callback: onDragEnd, singleRow: true } gantt.init("gantt_here"); gantt.parse(tasks); function onDragEnd(startPoint,endPoint,startDate,endDate,tasksBetweenDates,tasksInRow){ if (tasksInRow.length === 1) { var currentTask = tasksInRow[0]; if (currentTask.type === "project") { currentTask.render = "split"; gantt.addTask({ text:"Subtask of " + currentTask.text, start_date: gantt.roundDate(startDate), end_date: gantt.roundDate(endDate) }, currentTask.id); } else { var projectName = "new Project " + currentTask.text; var newProject = gantt.addTask({ text: projectName, render: "split", type: "project", }, currentTask.parent); gantt.moveTask( newProject, gantt.getTaskIndex(currentTask.id), gantt.getParent(currentTask.id) ); gantt.moveTask(currentTask.id, 0, newProject); gantt.calculateTaskLevel(currentTask) var newTask = gantt.addTask({ text:"Subtask of " + projectName, start_date: gantt.roundDate(startDate), end_date: gantt.roundDate(endDate) }, newProject); gantt.calculateTaskLevel(newTask); } } else if (tasksInRow.length === 0) { gantt.createTask({ text:"New task", start_date: gantt.roundDate(startDate), end_date: gantt.roundDate(endDate) }); } }
相关示例: 通过拖放创建拆分任务