Das Verschieben von Aufgaben in der Zeitleiste erleichtert es, deren Start- oder Enddaten und Dauer anzupassen. Standardmäßig ist Drag-and-Drop aktiviert, sodass Aufgaben entlang ihrer Zeilen verschoben werden können.
Um die Funktionsweise des Verschiebens anzupassen, können Sie diese Ereignisse verwenden:
Hier sind einige gängige Szenarien, in denen das Standardverhalten des Ziehens angepasst werden muss:
Um zu verhindern, dass bestimmte Aufgaben verschoben werden, kann das onBeforeTaskDrag-Ereignis verwendet werden:
gantt.attachEvent("onBeforeTaskDrag", function(id, mode, e){
if(gantt.getGlobalTaskIndex(id) % 2 == 0){
return false; // Verhindern des Verschiebens, wenn der globale Aufgabenindex gerade ist
}
return true; // Erlauben des Verschiebens, wenn der globale Aufgabenindex ungerade ist
});
Sie können das onTaskDrag-Ereignis verwenden, um sicherzustellen, dass Aufgaben innerhalb eines definierten Datumsbereichs bleiben.
Das onTaskDrag-Ereignis:
Kurz gesagt, so funktioniert es:
Um beispielsweise das Ziehen von Aufgaben außerhalb des Datumsbereichs "31. März 2020 - 11. April 2020" zu verhindern, können Sie den folgenden Code verwenden:
Verhindern des Ziehens von Aufgaben außerhalb des Intervalls - [31.03.2020, 11.04.2020]
var leftLimit = new Date(2020, 2, 31), rightLimit = new Date(2020, 3, 12);
gantt.attachEvent("onTaskDrag", function(id, mode, task, original){
var modes = gantt.config.drag_mode;
if(mode == modes.move || mode == modes.resize){
var diff = original.duration * (1000 * 60 * 60 * 24);
if(+task.end_date > +rightLimit){
task.end_date = new Date(rightLimit);
if(mode == modes.move)
task.start_date = new Date(task.end_date - diff);
}
if(+task.start_date < +leftLimit){
task.start_date = new Date(leftLimit);
if(mode == modes.move)
task.end_date = new Date(+task.start_date + diff);
}
}
});
Related sample: Drag parent task with its children
Um untergeordnete Aufgaben zu verschieben, wenn ihre übergeordnete Aufgabe verschoben wird, verwenden Sie das onTaskDrag-Ereignis (Details oben):
gantt.attachEvent("onTaskDrag", function(id, mode, task, original){
var modes = gantt.config.drag_mode;
if(mode == modes.move){
var diff = task.start_date - original.start_date;
gantt.eachTask(function(child){
child.start_date = new Date(+child.start_date + diff);
child.end_date = new Date(+child.end_date + diff);
gantt.refreshTask(child.id, true);
}, id);
}
});
// Ausrichten der untergeordneten Aufgaben an die Skala nach dem Ziehen
gantt.attachEvent("onAfterTaskDrag", function(id, mode, e){
var modes = gantt.config.drag_mode;
if(mode == modes.move){
var state = gantt.getState();
gantt.eachTask(function(child){
child.start_date = gantt.roundDate({
date: child.start_date,
unit: state.scale_unit,
step: state.scale_step
});
child.end_date = gantt.calculateEndDate(child.start_date,
child.duration, gantt.config.duration_unit);
gantt.updateTask(child.id);
}, id);
}
});
Diese Funktion ist exklusiv für die Gantt PRO Edition.
Standardmäßig können Aufgaben des Projekttyps nicht gezogen werden. Um dies zu aktivieren, setzen Sie die drag_project-Option auf true
:
gantt.config.drag_project = true;
Related sample: Draggable projects
Für Details zum Verschieben von Aufgaben zusammen mit ihren Abhängigkeiten lesen Sie den speziellen Artikel: Verschieben von Aufgaben zusammen mit ihren abhängigen Aufgaben.
Sie können die kürzeste Dauer festlegen, die eine Aufgabe beim Ändern der Größe haben kann, mithilfe der min_duration-Einstellung. Dies verhindert Aufgaben mit null Dauer.
Geben Sie den Wert in Millisekunden an:
// Minimale Dauer auf 1 Tag gesetzt
gantt.config.min_duration = 24 * 60 * 60 * 1000;
// ODER
// Minimale Dauer auf 1 Stunde gesetzt
gantt.config.min_duration = 60 * 60 * 1000;
Beim Arbeiten mit großen Datensätzen kann das Verschieben von Aufgaben über entfernte Positionen oder das Verknüpfen von weit entfernten Aufgaben schwierig sein. Die autoscroll-Funktion vereinfacht dies. Sie ist standardmäßig aktiviert, kann aber mit der autoscroll-Einstellung gesteuert werden:
gantt.config.autoscroll = false;
gantt.init("gantt_here");
Sie können auch die Scrollgeschwindigkeit in Millisekunden mit der autoscroll_speed-Eigenschaft anpassen:
gantt.config.autoscroll = true;
gantt.config.autoscroll_speed = 50;
gantt.init("gantt_here");
Um zu verhindern, dass bestimmte Aufgaben in ihrer Größe verändert werden, haben Sie zwei Möglichkeiten:
gantt.templates.task_class = function(start, end, task){
if(task.no_resize) { // 'no_resize' ist eine benutzerdefinierte Eigenschaft
return "no_resize";
}
return "";
};
Dann verbergen Sie die Größenänderungsgriffe mit CSS:
.no_resize .gantt_task_drag {
display: none !important;
}
false
zurück, um die Größenänderung zu blockieren:gantt.attachEvent("onBeforeTaskDrag", function(id, mode, e){
if(mode === "resize" && gantt.getTask(id).no_resize){
return false;
}
return true;
});
Der "resize"-Modus von Drag-and-Drop ermöglicht das Ändern entweder des Start- oder Enddatums einer Aufgabe. Um zu bestimmen, welche Seite in ihrer Größe verändert wird, verwenden Sie das gantt.getState().drag_from_start-Flag:
gantt.attachEvent("onBeforeTaskDrag", function(id, mode, e){
if(mode === "resize"){
if(gantt.getState().drag_from_start === true) {
// Startdatum wird geändert
} else {
// Enddatum wird geändert
}
}
return true;
});
Um die Größenänderung für bestimmte Daten zu deaktivieren, lokalisieren Sie die Größenänderungsgriffe mit diesen Selektoren:
.gantt_task_drag[data-bind-property="start_date"]
.gantt_task_drag[data-bind-property="end_date"]
Um beispielsweise die Größenänderung von Startdaten zu deaktivieren:
.gantt_task_drag[data-bind-property="start_date"] {
display: none !important;
}
Um die Größenänderung von Enddaten zu deaktivieren:
.gantt_task_drag[data-bind-property="end_date"] {
display: none !important;
}
Alternativ können Sie das onBeforeTaskDrag-Ereignis verwenden, um die Größenänderung programmatisch zu blockieren:
gantt.attachEvent("onBeforeTaskDrag", function(id, mode, e){
if(mode === "resize"){
if(gantt.getState().drag_from_start === true) {
return false; // Blockieren der Größenänderung des Startdatums
} else {
// Erlauben der Größenänderung des Enddatums
}
}
return true;
});
Zurück nach oben