本库自带 Quick Info 扩展,当用户在屏幕上点击任务时,会弹出一个显示任务详情的弹窗。
Related sample: QuickInfo extension
要开始使用该扩展,只需通过 gantt.plugins 方法激活 "Quick Info" 插件。
gantt.plugins({
quick_info: true
});
如果你想关闭 quick_info 扩展,将 show_quick_info 属性设置为 false:
gantt.config.show_quick_info = false;
gantt.init("gantt_here");
Quick Info 扩展提供了一组 API,可用于调整设置、控制行为或自定义弹窗外观。
你可以使用 gantt.ext.quickInfo 对象的 API 或下方列出的 dhtmlxGantt 公共 API:
方法
事件
属性
模板
默认情况下,Quick Info 扩展会在选中任务上方自动显示弹窗。
从 v7.0 开始,Quick Info 功能增强,提供了 gantt.ext.quickInfo 对象,可手动控制弹窗的显示。
gantt.ext.quickInfo 对象提供以下方法:
可通过 gantt.ext.quickInfo.show() 方法,为指定任务、链接、资源面板或屏幕自定义位置显示弹窗:
// 为指定任务显示弹窗
var task = gantt.getTask(10);
gantt.ext.quickInfo.show(task.id);
// 在指定坐标处显示弹窗
gantt.ext.quickInfo.show(100, 200);
以下示例展示如何为资源显示弹窗:
const quickInfo = gantt.ext.quickInfo;
gantt.attachEvent("onGanttReady", function(){
quickInfo.setContainer(document.body);
})
gantt.attachEvent("onEmptyClick", function (e) {
const domHelpers = gantt.utils.dom;
const resourceElement = domHelpers.closest(e.target, "[data-resource-id]");
if(resourceElement){
const resourceId = resourceElement.getAttribute("data-resource-id");
const resource = gantt.$resourcesStore.getItem(resourceId);
const position = resourceElement.getBoundingClientRect();
quickInfo.show(position.right, position.top);
const assignedTasks = gantt.getResourceAssignments(resourceId).map(function(assign){
return gantt.getTask(assign.task_id).text;
});
quickInfo.setContent({
header: {
title: resource.text,
date: ""
},
content: "Assigned tasks: " + assignedTasks.join(", "),
buttons: []
});
}
});
以下为为指定链接显示弹窗的示例:
const quickInfo = gantt.ext.quickInfo;
gantt.attachEvent("onLinkClick", function(id,e){
//可在此自定义逻辑
const link = gantt.getLink(id);
const linksFormatter = gantt.ext.formatters.linkFormatter();
const domHelpers = gantt.utils.dom;
const position = domHelpers.getRelativeEventPosition(e, gantt.$task_data);
const sourceTask = gantt.getTask(link.source);
const targetTask = gantt.getTask(link.target);
quickInfo.show(position.x, position.y);
let linkDescr = "";
if (link.type === gantt.config.links.start_to_start){
linkDescr = "Start to start";
} else if (link.type === gantt.config.links.start_to_finish){
linkDescr = "Start to finish";
} else if (link.type === gantt.config.links.finish_to_finish){
linkDescr = "Finish to Finish";
} else {
linkDescr = "Finish to start";
}
quickInfo.setContent({
header: {
title: `${linkDescr} link`,
date: ""
},
content: `Source: ${sourceTask.text}<br>
Target: ${targetTask.text}`,
buttons: []
});
});
要关闭弹窗,请使用 gantt.ext.quickInfo.hide() 方法。其行为取决于 gantt.config.quick_info_detached 设置,有以下两种情况:
gantt.config.quick_info_detached = false;
gantt.init("gantt_here");
// 动画关闭弹窗
gantt.ext.quickInfo.hide();
gantt.config.quick_info_detached = false;
gantt.init("gantt_here");
// 立即关闭弹窗
gantt.ext.quickInfo.hide(true);
注意:如果 gantt.config.quick_info_detached 为 true,弹窗始终会立即关闭。
默认情况下,quick info 弹窗包含标题、日期、内容和按钮,外观如下:
如果需要自定义弹窗外观或自行构建,可以通过 gantt.ext.quickInfo.setContent() 定义 HTML 内容:
gantt.locale.labels.custom_button = "My button"
gantt.ext.quickInfo.setContent({
header:{
title: "My custom header",
date: "18th of February, 2020"
},
content: "some content here",
buttons: ["custom_button"]
})
这样会生成如下 quick info 弹窗:
通过 $click 对象,可以为弹窗内的按钮添加自定义操作:
gantt.config.quickinfo_buttons=["icon_delete","icon_edit","advanced_details_button"];
gantt.locale.labels["advanced_details_button"] = "Advanced Info";
gantt.init("gantt_here");
gantt.$click.buttons.advanced_details_button=function(id){
gantt.message("These are advanced details");
return false; //阻止默认行为
};
使用 gantt.ext.quickInfo.setContainer() 可将 quick info 弹窗显示在自定义容器内:
const quickInfo = gantt.ext.quickInfo;
quickInfo.setContainer(document.body); gantt.ext.quickInfo.show(1300,100);
gantt.locale.labels.custom_button = "My button"
gantt.ext.quickInfo.setContent({
header:{
title: "My custom header",
date: "18th of February, 2020"
},
content: "some content here",
buttons: ["custom_button"]
});
此时,带有自定义内容的弹窗会显示在 document.body 内部,而非 Gantt 容器中: