当前位置:首页 > JavaScript

js如何实现甘特图

2026-03-15 23:24:54JavaScript

实现甘特图的 JavaScript 方法

使用现成库(推荐)

1. 使用 dhtmlxGantt
安装库:

npm install dhtmlx-gantt

基础实现代码:

js如何实现甘特图

import { gantt } from "dhtmlx-gantt";
import "dhtmlx-gantt/codebase/dhtmlxgantt.css";

gantt.init(document.getElementById("gantt_container"));
gantt.parse({
    data: [
        { id: 1, text: "Task 1", start_date: "2023-10-01", duration: 5 },
        { id: 2, text: "Task 2", start_date: "2023-10-06", duration: 3 }
    ]
});

2. 使用 Chart.js 插件
通过 chartjs-plugin-gantt 扩展:

js如何实现甘特图

import { Chart } from "chart.js";
import Gantt from "chartjs-plugin-gantt";

Chart.register(Gantt);
const ctx = document.getElementById("ganttChart").getContext("2d");
new Chart(ctx, {
    type: "gantt",
    data: {
        datasets: [{
            label: "Project Plan",
            data: [
                { x: "Phase 1", y: [new Date("2023-10-01"), new Date("2023-10-05")] }
            ]
        }]
    }
});

原生 Canvas 绘制

通过 Canvas API 手动实现基础甘特图:

const canvas = document.getElementById("ganttCanvas");
const ctx = canvas.getContext("2d");

function drawGantt(tasks) {
    tasks.forEach((task, i) => {
        const y = i * 30 + 20;
        ctx.fillStyle = "#4CAF50";
        ctx.fillRect(50, y, task.duration * 10, 20);
        ctx.fillText(task.name, 10, y + 15);
    });
}

drawGantt([
    { name: "Task A", duration: 5 },
    { name: "Task B", duration: 3 }
]);

SVG 动态生成

利用 SVG 实现可交互甘特图:

const svg = document.getElementById("ganttSvg");
function createBar(task) {
    const bar = document.createElementNS("http://www.w3.org/2000/svg", "rect");
    bar.setAttribute("x", task.startDay * 10);
    bar.setAttribute("y", task.id * 30);
    bar.setAttribute("width", task.duration * 10);
    bar.setAttribute("height", 20);
    bar.setAttribute("fill", "#2196F3");
    svg.appendChild(bar);
}

createBar({ id: 1, startDay: 2, duration: 4 });

关键注意事项

  • 时间轴处理:日期需转换为数值或时间戳便于计算坐标。
  • 响应式设计:监听窗口变化并调用 gantt.resize() 或重绘 Canvas。
  • 数据格式:标准结构需包含 id/text/start_date/duration/progress 等字段。

扩展功能

  • 依赖关系:通过 gantt.addLink() 添加任务连线。
  • 动态加载:结合 Ajax 从后端获取任务数据。
  • 自定义样式:修改 CSS 或覆盖库的默认样式类。

以上方法可根据项目复杂度选择,库方案适合快速开发,原生方案适合高度定制需求。

分享给朋友:

相关文章

vue如何实现登录

vue如何实现登录

实现登录功能的基本步骤 使用Vue实现登录功能通常需要结合后端API、状态管理以及路由控制。以下是常见的实现方式: 创建登录表单组件 在Vue组件中构建包含用户名和密码输入框的表单: <te…

vue如何实现单选

vue如何实现单选

Vue 实现单选的方法 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定到同一个变量,确保同一时间只有一个选…

vue自动登录如何实现

vue自动登录如何实现

实现自动登录的基本思路 自动登录通常通过结合本地存储(如localStorage或cookie)和token验证机制实现。用户首次登录成功后,服务器返回的认证token会被保存在客户端,下次打开应用时…

甘特图vue实现

甘特图vue实现

甘特图在 Vue 中的实现方法 使用现成库(推荐) 推荐使用 vue-ganttastic 或 dhtmlx-gantt 等现成库快速实现甘特图功能。 安装 vue-ganttastic: npm…

vue如何实现tap

vue如何实现tap

Vue 中实现类似移动端 tap 事件的方法 在 Vue 中可以通过以下几种方式实现类似移动端 tap(轻触)事件的效果: 使用第三方库 安装 v-tap 指令库可以快速实现 tap 事件: np…

vue项目如何实现

vue项目如何实现

安装Vue.js 通过npm或yarn安装Vue.js。确保Node.js环境已配置完成。 npm install vue # 或 yarn add vue 创建Vue项目 使用Vue CLI工具快…