Библиотека dhtmlxGantt включает расширение, которое улучшает возможности перетаскивания при работе с задачами на временной шкале.
Расширение click_drag предназначено для:
Чтобы использовать это расширение, активируйте плагин click_drag с помощью метода gantt.plugins.
Чтобы активировать расширенное перетаскивание, настройте опцию gantt.config.click_drag
и определите необходимые свойства из списка ниже в его объекте:
gantt.config.click_drag = {
callback: onDragEnd,
singleRow: true
};
{absolute: {left: number, top: number}, relative: {left: number, top: number}}
,absolute
относится к координатам от левого верхнего угла документа, а relative
представляет координаты относительно элемента viewport.startPoint
, структурирован как:{absolute: {left: number, top: number}, relative: {left: number, top: number}}
.requestAnimationFrame
во время рендеринга.true
, ограничивает выбор одной строкой, соответствующей высоте задачи.Вы можете привязать следующие события к элементу, используемому в качестве viewPort
(по умолчанию gantt.$task_data
, что является секцией временной шкалы с задачами):
callback
(если она определена).Задачи можно создавать непосредственно на временной шкале, щелкнув по пустой области для установки даты начала задачи и перетаскивания вправо для определения ее продолжительности.
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: "Подзадача " + parent.text,
start_date: gantt.roundDate(startDate),
end_date: gantt.roundDate(endDate)
}, parent.id);
} else if (tasksInRow.length === 0) {
gantt.createTask({
text: "Новая задача",
start_date: gantt.roundDate(startDate),
end_date: gantt.roundDate(endDate)
});
}
}
Related sample: Create new tasks by Drag and Drop
С помощью расширения click_drag вы можете назначить время незапланированным задачам с помощью перетаскивания.
Задачи можно выбирать с помощью перетаскивания в различных режимах, таких как по датам, по строкам или в пределах границ.
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;
default:
return;
}
}
Related sample: Select multiple tasks by Drag and Drop
Функция перетаскивания также поддерживает создание частей разделенных задач.
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: "Подзадача " + currentTask.text,
start_date: gantt.roundDate(startDate),
end_date: gantt.roundDate(endDate)
}, currentTask.id);
} else {
var projectName = "новый проект " + 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: "Подзадача " + projectName,
start_date: gantt.roundDate(startDate),
end_date: gantt.roundDate(endDate)
}, newProject);
gantt.calculateTaskLevel(newTask);
}
} else if (tasksInRow.length === 0) {
gantt.createTask({
text: "Новая задача",
start_date: gantt.roundDate(startDate),
end_date: gantt.roundDate(endDate)
});
}
}
Related sample: Create split tasks by Drag and Drop
К началу