dhtmlxGantt 库提供了一个扩展,其中包括在时间线中处理任务时的高级拖放功能。
总而言之,click_drag扩展允许:
- 使用拖放创建任务
- 使用拖放设置计划外任务的时间
- 通过拖放选择任务
- 使用拖放功能创建部分拆分任务(专业版)
要开始使用扩展,请使用gantt.plugins方法启用click_drag插件。
要启用高级拖放,请指定click_drag配置选项,并在其对象内从下面的列表中设置必要的属性:
gantt.config.click_drag = {
callback: onDragEnd,
singleRow: true
};
- className – ( string ) 为选定元素设置自定义 CSS 类
-
render – ( function ) 一个函数,它创建一个在拖动过程中呈现的元素。接受两个参数:
-
startPoint – ( object ) – 类型的对象:
{absolute: {left: number, top: number}, relative: {left: number, top: number} },
其中 absolute – 文档左上角的坐标,relative – 用作视口的左上角元素的坐标 -
endPoint – ( object ) 类型的对象:
{absolute: {left: number, top: number}, relative: {left: number, top: number} },
其中 absolute – 文档左上角的坐标,relative – 用作视口的左上角元素的坐标
-
startPoint – ( object ) – 类型的对象:
- viewPort – ( HTMLElement ) 附加事件和选择的元素
- useRequestAnimationFrame – ( boolean ) 定义在渲染过程中是否使用 requestAnimationFrame
-
回调– ( function ) – 释放鼠标按钮时将调用的函数。采用 6 个参数:
-
startPoint – ( object ) – 类型的对象:
{absolute: {left: number, top: number}, relative: {left: number, top: number} },
其中 absolute – 文档左上角的坐标,relative – 用作视口的左上角元素的坐标 -
endPoint – ( object ) 类型的对象:
{absolute: {left: number, top: number}, relative: {left: number, top: number} },
其中 absolute – 文档左上角的坐标,relative – 用作视口的左上角元素的坐标 - startDate – ( Date ) 起始点对应的日期
- endDate – ( Date ) 结束点对应的日期
- tasksBetweenDates – ( array ) 开始和结束日期点之间的任务数组
- tasksInRows – ( array ) 在开始和结束坐标之间垂直选择的任务数组
-
startPoint – ( object ) – 类型的对象:
- singleRow – ( boolean ) true 仅在一行中添加选择等于任务的高度
您可以将以下事件附加到作为 viewPort 传递的元素(默认情况下为 gantt.$task_data – 带有任务栏的时间轴的一部分):
- onBeforeDrag – 在开始拖动之前按下鼠标按钮后触发
- onDrag – 每次在开始拖动后但在释放鼠标按钮之前触发
- onBeforeDragEnd – 在释放鼠标按钮后但在删除呈现的元素和搜索选择的任务之前触发
- onDragEnd – 在删除渲染元素并找到处于选择状态但调用回调函数(如果指定)之前的任务之后触发
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<tasksBetweenDates.length; i++) {for (var j=0; j<tasksInRows.length; j++) {if (tasksBetweenDates[i] === tasksInRows[j]) {gantt.selectTask(tasksBetweenDates[i].id);}}}break;return;}}
相关示例: 通过拖放选择多个任务
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)});}}
相关示例: 通过拖放创建拆分任务
DHTMLX Gantt享有超十年声誉,支持跨浏览器和跨平台,性价比高,可满足项目管理控件应用的所有需求,是最完善的甘特图图表库。
2022年终狂欢火热进行中,全场产品超低价,DHTMLX全系产品享8.8折!了解更多活动详情,欢迎访问 咨询在线客服。
甘特图控件交流群:764148812 欢迎进群交流讨论
年终狂欢季,全场产品,限时特惠,立即了解详情!
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!