用highcharts做甘特图展示

本文介绍了如何使用Highcharts库来创建甘特图。首先,需要引入jQuery和Highcharts的相关js文件。接着,详细讲述了body中的HTML结构和JavaScript代码设置。在实现过程中,数据格式的适配是主要难点之一。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、首先,需要引插件:

jquery-1.11.3.js

highcharts.js

highcharts-more.js

二、body中的html代码

<div id="container_center"></div>

三、js代码

<script type="text/javascript">
    var xArray;
    var yArray;
    var seriesArray;
    $(function() {

        $.ajax({
               type: "POST",    
               dataType: "JSON",    
               url: "<%=basePath%>admin/project/getprojectdatas.php?id=${id}",
               success : function(result){
                   xArray = result.xArray;
                   yArray = result.yArray;
                   seriesArray = result.seriesArray;
                   $('#container_center').highcharts({
                        chart: {
                            type: 'columnrange',
                            inverted: true //反转
                        },

                        title: {
                            text: ''
                        },

                        subtitle: {
                            text: ''
                        },
                        xAxis: {
                            categories: xArray
                        },
                        yAxis: {
                            categories: yArray,
                            title: {
                                text: '日期'
                            },
                            labels: {
                                rotation: -30,
                                formatter: function() {
                                    var vDate = new Date(this.value);
                                    if(vDate.getFullYear() === 1970) {
                                        return "";
                                    } else {
                                        return vDate.getFullYear() + "-" + (vDate.getMonth() + 1) + "-" + vDate.getDate();
                                    }

                                }
                            }
                        },
                        tooltip: {
                            formatter: function() {
                                var beginDate = new Date(yArray[this.y]);   //开始时间  时间戳
                                var dateIndex;
                                for(var i = 0; i < xArray.length; i++){
                                    if(this.x === xArray[i]){
                                        dateIndex = i;
                                    }
                                }
                                var endDateIndex = seriesArray[dateIndex][1];
                                var endDate = new Date(yArray[endDateIndex]);   //结束时间 时间戳

                                var beginYear = beginDate.getFullYear();    //开始年份
                                var beginMonth = beginDate.getMonth() + 1;  //开始月份
                                var beginDay = beginDate.getDate();         //开始号数

                                var endYear = endDate.getFullYear();        //结束年份
                                var endMonth = endDate.getMonth() + 1;      //结束月份
                                var endDay = endDate.getDate();             //结束号数

                                var days = (endDate - beginDate) / (1000*60*60*24) +1   //总天数


                                return this.x+" : "+beginYear+"/"+beginMonth+"/"+beginDay+" - "+endYear+"/"
                                    +endMonth+"/"+endDay + " , 共"+days+"天";
                            }
                        },

                        plotOptions: {
                            columnrange: {
                                dataLabels: {
                                    enabled: true,
                                    formatter: function() {
                                        return;
                                    }
                                }
                            }
                        },

                        legend: {
                            enabled: false
                        },
                        series: [{
                            data: seriesArray
                        }]
                    });
               }
            });

    });
</script>

难点

数据格式需要多思考

Highgantt 是用纯 JavaScript 编写的甘特图控件 主要优势(功能特点) browsers兼容性 Highstock 可以在所有的移动设备及电脑上的浏览器中使用,包括 iPhone,iPad 和 IE6 以上的版本。在 IOS 和 Android 系统中 Highstock 支持多点触摸功能,因而可以给您提供极致的用户体验。在现代的浏览器中使用 SVG 技术进行图形绘制,在低版本 IE 则使用 VML 进行图形绘制。 free非商业使用免费 在个人网站、学校网站及非盈利机构中使用 Highstock 完全不需要经过我们的许可,直接可以任意使用! 商业网站或网站,请查看我们的 使用协议及价格。 open开源 Highstock 最重要的特点之一就是:无论免费版还是付费版,你都可以下载源码并可以对其进行编辑。 基于开源社区我们可以第一时间获取用户的需求、Bug 修复及吸收社区贡献。 no-backend纯 JavaScript Highstock 完全基于 HTML5 技术,不需要再客户端安装任何插件,如 Flash 或 Java。此外你也不用配置任何服务端环境,不需要 PHP、Tomcat、ASP.NET 等,只需要两个 JS 文件即可运行。 chart-types图表种类丰富 Highstock 支持直线图、折线图、面积图、面积曲线图、柱形图、散点图、蜡烛图(OHLC)、K线图、标签图、面积范围图、柱形范围图等多种图表, 其中很多图表可以集成在同一个图形中形成混合图 config-syntax简单的配置语法 在 Highstock 中设置配置选项不需要任何高级的编程技术,所有的配置都是 JSON 对象,只包含用冒号连接的键值对、用逗号进行分割、用括号进行对象包裹。JSON 具有易于人阅读和编写,同时也易于机器解析和生成的特点。 动态交互性 Highstock 支持丰富交互性,在图表创建完毕后,可以用丰富的 API 进行添加、移除或修改数据列、数据点、坐标轴等操作。 结合 jQuery 的 ajax 功能,可以到实时刷新数据、用户手动修改数据等功能,结合事件处理,可以到各种交互功能。 范围选择器 在处理大数据集时,我们可能需要查看不同时间范围的数据。Highstock 提供了范围选择器,方便的用它来选择预设范围的时间,例如 1个月、一季度、1年等,你可以通过时间输入框来选择自己想要查看数据范围。 滚动条和导航器 通过滚动条和导航器可以更加直观的操作和查看特定范围的数据。 事件标记 通过添加标志数据列可以为数据相关的事件标记和注释。 支持多坐标轴 多个数据进行对比这是非常常见的需求,Highstock 可以让你为每个类型的数据添加坐标轴,每个轴可以定义放置的位置,所有的设置都可以独立生效,包括旋转、样式设计和定位,当然也支持多个数据共用一个坐标轴。 tooltip数据提示框 当鼠标划过图形时,Highstock 可以将数据点或数据列的信息展示在提示框中,并且提示框会跟随用户的鼠标;我们了大量工作,可以智能的显示离鼠标最近的点或被遮盖点的信息。 datetime时间轴 Highstock 对时间轴的处理非常智能,可以精确的计算出月、周、日、小时、分钟等时间刻度的位置。 data grouping数据分组与合并 如果数据集包含 10 万个,浏览器对每个点进行计算并渲染的话效率会非常低。Highstock 具有数据分类功能,可以以飞速的进行数据分组;放大至小范围的数据是会重新分组,因为你可以查看高度清晰的数据又不失效率和速度。 exporting导出和打印 Highstock 支持导出功能,用户可以一键导出 PNG、JPEG、PDF 或 SVG 文件,通过插件可以实现导出为 Excel 文件功能;另外,用户还可以从网页上直接打印图表。 zooming缩放和平移 除了通过滚动条或导航器控制放大和平移功能,你还可以通过鼠标和手指来进行这两个操作。 ajax方便加载外部数据 Highstock 的数据是 JavaScript 数组或对象,这些数据可以是本地的配置对象,独立的数据文件(JSON、CVS)甚至是不同的网站上定义。另外,这些数据可以用任何形式处理好并加载到 Highstock 中。
### 如何在 Vue 中使用 Highcharts 实现甘特图 为了成功在 Vue 项目中集成并显示 Highcharts甘特图,需按照特定方式引入必要的模块和配置组件。 #### 安装依赖包 确保安装了 `highcharts` 和 `highcharts-vue` 插件。可以通过 npm 或 yarn 来完成此操作: ```bash npm install highcharts highcharts-vue ``` 或者 ```bash yarn add highcharts highcharts-vue ``` #### 引入所需模块 除了基础的 Highcharts 库外,还需特别引入用于创建甘特图的支持模块——即 `gantt` 模块。这一步骤对于解决因缺失而引发的错误至关重要[^2]。 在项目的入口文件(通常是 `main.js`),添加如下代码来全局注册这些资源: ```javascript import Vue from 'vue'; // 导入核心库以及Vue插件 import Highcharts from 'highcharts/highcharts'; import HighchartsVue from 'highcharts-vue'; // 特别注意这里要导入Gantt图表支持 import Gantt from 'highcharts/modules/gantt'; Gantt(Highcharts); Vue.use(HighchartsVue); ``` #### 创建甘特图实例 当一切准备就绪之后,在具体的 Vue 组件内部定义数据结构与选项设置,并通过 `<highcharts>` 自定义标签渲染图形。考虑到容器未及时渲染的问题,建议利用生命周期钩子如 `mounted()` 方法内初始化图表[^3]。 下面是一个简单的例子展示如何在一个名为 `MyGanttChart.vue` 的单文件组件里构建基本的甘特图: ```html <template> <div> <!-- 使用高德地图官方提供的自定义组件 --> <highcharts :options="chartOptions"></highcharts> </div> </template> <script> export default { name: "MyGanttChart", data() { return { chartOptions: { title: { text: 'Simple Gantt Chart' }, series: [{ type: 'gantt', data: [ // 添加任务条目... {name: 'Task A', start: Date.UTC(2021, 9, 8), end: Date.UTC(2021, 9, 15)}, {name: 'Task B', start: Date.UTC(2021, 9, 16), end: Date.UTC(2021, 9, 22)} ] }] } }; }, }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值