Die dhtmlxGantt-Bibliothek enthält eine Erweiterung, die die Drag-and-Drop-Funktionen beim Arbeiten mit Aufgaben auf der Zeitleiste verbessert.
Die click_drag-Erweiterung ist dafür konzipiert:
Um diese Erweiterung zu verwenden, aktivieren Sie das click_drag Plugin über die gantt.plugins Methode.
Um erweitertes Drag-and-Drop zu aktivieren, konfigurieren Sie die gantt.config.click_drag
Option und definieren Sie die gewünschten Eigenschaften aus der untenstehenden Liste innerhalb ihres Objekts:
gantt.config.click_drag = {
callback: onDragEnd,
singleRow: true
};
{absolute: {left: number, top: number}, relative: {left: number, top: number}}
,absolute
sich auf die Koordinaten der oberen linken Ecke des Dokuments bezieht und relative
die Koordinaten relativ zum Viewport-Element darstellt.startPoint
, strukturiert als:{absolute: {left: number, top: number}, relative: {left: number, top: number}}
.requestAnimationFrame
während des Renderings verwendet wird.true
, wird die Auswahl auf eine einzige Zeile beschränkt, die der Aufgabenhöhe entspricht.Sie können die folgenden Ereignisse an das Element anhängen, das als viewPort
verwendet wird (standardmäßig gantt.$task_data
, welches der Zeitachsenabschnitt mit den Aufgabenbalken ist):
callback
Funktion (falls definiert) ausgeführt wird.Aufgaben können direkt auf der Zeitleiste erstellt werden, indem Sie auf einen leeren Bereich klicken, um das Startdatum der Aufgabe festzulegen, und nach rechts ziehen, um die Dauer zu bestimmen.
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: "Unteraufgabe von " + parent.text,
start_date: gantt.roundDate(startDate),
end_date: gantt.roundDate(endDate)
}, parent.id);
} else if (tasksInRow.length === 0) {
gantt.createTask({
text: "Neue Aufgabe",
start_date: gantt.roundDate(startDate),
end_date: gantt.roundDate(endDate)
});
}
}
Related sample: Create new tasks by Drag and Drop
Mit der click_drag-Erweiterung können Sie Zeit für nicht geplante Aufgaben mit Drag-and-Drop zuweisen.
Aufgaben können in verschiedenen Modi mit Drag-and-Drop ausgewählt werden, z. B. nach Datum, nach Zeilen oder innerhalb von Grenzen.
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
Die Drag-and-Drop-Funktion unterstützt auch das Erstellen von Teilen von geteilten Aufgaben.
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: "Unteraufgabe von " + currentTask.text,
start_date: gantt.roundDate(startDate),
end_date: gantt.roundDate(endDate)
}, currentTask.id);
} else {
var projectName = "neues Projekt " + 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: "Unteraufgabe von " + projectName,
start_date: gantt.roundDate(startDate),
end_date: gantt.roundDate(endDate)
}, newProject);
gantt.calculateTaskLevel(newTask);
}
} else if (tasksInRow.length === 0) {
gantt.createTask({
text: "Neue Aufgabe",
start_date: gantt.roundDate(startDate),
end_date: gantt.roundDate(endDate)
});
}
}
Related sample: Create split tasks by Drag and Drop
Zurück nach oben