当前位置:首页 > HTML

h5 实现甘特图

2026-03-06 13:03:26HTML

使用HTML5和JavaScript实现甘特图

HTML5结合JavaScript可以创建交互式甘特图,以下是实现方法:

Canvas绘图基础

<canvas id="ganttChart" width="800" height="400"></canvas>
<script>
  const canvas = document.getElementById('ganttChart');
  const ctx = canvas.getContext('2d');

  // 绘制网格和坐标轴
  ctx.strokeStyle = '#ccc';
  ctx.lineWidth = 1;
  for (let i = 0; i <= 10; i++) {
    ctx.beginPath();
    ctx.moveTo(50, 50 + i * 30);
    ctx.lineTo(750, 50 + i * 30);
    ctx.stroke();
  }
</script>

动态数据渲染

function drawGantt(tasks) {
  tasks.forEach((task, index) => {
    const y = 60 + index * 30;
    const xStart = 50 + (task.startDay * 20);
    const width = (task.duration * 20);

    ctx.fillStyle = task.color || '#4CAF50';
    ctx.fillRect(xStart, y, width, 20);

    ctx.fillStyle = '#000';
    ctx.font = '12px Arial';
    ctx.fillText(task.name, xStart + 5, y + 15);
  });
}

使用现成库简化开发

1. Chart.js甘特图插件

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-gantt"></script>

<canvas id="ganttChart"></canvas>
<script>
  new Chart(document.getElementById('ganttChart'), {
    type: 'gantt',
    data: {
      datasets: [{
        label: '项目计划',
        data: [
          {task: '需求分析', start: '2023-01-01', end: '2023-01-07'},
          {task: 'UI设计', start: '2023-01-08', end: '2023-01-15'}
        ]
      }]
    }
  });
</script>

2. D3.js实现高级甘特图

import * as d3 from 'd3';

const svg = d3.select("#gantt-container")
  .append("svg")
  .attr("width", 800)
  .attr("height", 400);

// 创建时间比例尺
const xScale = d3.scaleTime()
  .domain([new Date(2023, 0, 1), new Date(2023, 2, 1)])
  .range([0, 700]);

// 绘制任务条
svg.selectAll(".task")
  .data(tasks)
  .enter()
  .append("rect")
  .attr("class", "task")
  .attr("x", d => xScale(d.startDate))
  .attr("y", (d, i) => 50 + i * 30)
  .attr("width", d => xScale(d.endDate) - xScale(d.startDate))
  .attr("height", 20);

响应式设计要点

CSS样式优化

.gantt-container {
  overflow-x: auto;
  max-width: 100%;
}

@media (max-width: 768px) {
  .gantt-task {
    height: 15px;
    font-size: 0.8em;
  }
}

交互功能增强

// 添加工具提示
canvas.addEventListener('mousemove', (e) => {
  const rect = canvas.getBoundingClientRect();
  const x = e.clientX - rect.left;
  const y = e.clientY - rect.top;

  tasks.forEach(task => {
    if (isInsideTask(x, y, task)) {
      showTooltip(task);
    }
  });
});

数据格式建议

标准化任务数据结构

{
  "tasks": [
    {
      "id": 1,
      "name": "前端开发",
      "start": "2023-06-01",
      "end": "2023-06-15",
      "progress": 0.7,
      "dependencies": [2]
    }
  ]
}

日期处理工具

h5 实现甘特图

function parseDate(dateStr) {
  const parts = dateStr.split('-');
  return new Date(parts[0], parts[1]-1, parts[2]);
}

function getWorkingDays(start, end) {
  // 计算工作日逻辑
}

标签: 甘特图
分享给朋友:

相关文章

js实现甘特图

js实现甘特图

使用开源库实现甘特图 推荐使用 dhtmlxGantt 或 frappe-gantt 这两个成熟的 JavaScript 库来实现甘特图功能。dhtmlxGantt 功能全面但需要商业授权,frapp…

js如何实现甘特图

js如何实现甘特图

使用原生JavaScript实现甘特图 通过Canvas或SVG绘制基础甘特图结构,动态生成任务条和时间轴。需手动计算坐标和交互逻辑,适合轻量级需求。 const canvas = document…

vue实现甘特图

vue实现甘特图

使用 vue-gantt-elastic 实现甘特图 vue-gantt-elastic 是一个基于 Vue.js 的甘特图组件,支持拖拽、缩放、自定义样式等功能。 安装依赖: npm insta…

vue实现甘特图展示

vue实现甘特图展示

使用Vue-Gantt组件库(如vue-gantt-elastic) 安装依赖包: npm install vue-gantt-elastic 基础实现代码: <template&g…

vue实现车间甘特图

vue实现车间甘特图

Vue 实现车间甘特图的方法 使用第三方库(如 dhtmlx-gantt) dhtmlx-gantt 是一个功能强大的甘特图库,支持 Vue 集成。安装后可直接在组件中使用,提供任务管理、时间轴调整和…

vue实现bryntum甘特图

vue实现bryntum甘特图

安装Bryntum甘特图库 在Vue项目中安装Bryntum甘特图的核心库和Vue包装器。通过npm或yarn安装以下依赖: npm install @bryntum/gantt @bryntum/…