Highcharts 实现甘特图

1 篇文章 0 订阅
1 篇文章 0 订阅

前言
Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表。HighCharts支持的图表类型有曲线图、区域图、柱状图、饼状图、散状点图和综合图表。

一 准备工作
引入需要的插件了创建一个div容器

<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="utf-8">	<meta name="viewport" content="width=device-width, initial-scale=1">
        <meta http-equiv="x-ua-compatible" content="ie=edge">
        <link rel="icon" href="https://static.jianshukeji.com/hcode/images/favicon.ico">
        <style>
        </style>
        <script src="https://code.highcharts.com.cn/gantt/highcharts-gantt.js"></script>
        <script src="https://code.highcharts.com.cn/highcharts/modules/exporting.js"></script>
    </head>
    <body>
        <div id="container"></div>
        <script>
        </script>
    </body>
</html>

创建数据

var today = new Date(),
	day = 1000 * 60 * 60 * 24,
	// Utility functions
	dateFormat = Highcharts.dateFormat,
	defined = Highcharts.defined,
	isObject = Highcharts.isObject,
	reduce = Highcharts.reduce;
// Set to 00:00:00:000 today
today.setUTCHours(0);
today.setUTCMinutes(0);
today.setUTCSeconds(0);
today.setUTCMilliseconds(0);
today = today.getTime();
Highcharts.ganttChart('container', {
	series: [{
		name: 'Offices',
		data: [{
			name: 'New offices',
			id: 'new_offices',
			owner: 'Peter'
		}, {
			name: 'Prepare office building',
			id: 'prepare_building',
			parent: 'new_offices',
			start: today - (2 * day),
			end: today + (6 * day),
			completed: {
				amount: 0.2
			},
			owner: 'Linda'
		}, {
			name: 'Inspect building',
			id: 'inspect_building',
			dependency: 'prepare_building',
			parent: 'new_offices',
			start: today + 6 * day,
			end: today + 8 * day,
			owner: 'Ivy'
		}, {
			name: 'Passed inspection',
			id: 'passed_inspection',
			dependency: 'inspect_building',
			parent: 'new_offices',
			start: today + 9.5 * day,
			milestone: true,
			owner: 'Peter'
		}, {
			name: 'Relocate',
			id: 'relocate',
			dependency: 'passed_inspection',
			parent: 'new_offices',
			owner: 'Josh'
		}, {
			name: 'Relocate staff',
			id: 'relocate_staff',
			parent: 'relocate',
			start: today + 10 * day,
			end: today + 11 * day,
			owner: 'Mark'
		}, {
			name: 'Relocate test facility',
			dependency: 'relocate_staff',
			parent: 'relocate',
			start: today + 11 * day,
			end: today + 13 * day,
			owner: 'Anne'
		}, {
			name: 'Relocate cantina',
			dependency: 'relocate_staff',
			parent: 'relocate',
			start: today + 11 * day,
			end: today + 14 * day
		}]
	}, {
		name: 'Product',
		data: [{
			name: 'New product launch',
			id: 'new_product',
			owner: 'Peter'
		}, {
			name: 'Development',
			id: 'development',
			parent: 'new_product',
			start: today - day,
			end: today + (11 * day),
			completed: {
				amount: 0.6,//完成数
				fill: '#e80'
			},//完成对象
			owner: 'Susan'
		}, {
			name: 'Beta',
			id: 'beta',
			dependency: 'development',
			parent: 'new_product',
			start: today + 12.5 * day,
			milestone: true,
			owner: 'Peter'
		}, {
			name: 'Final development',
			id: 'finalize',
			dependency: 'beta',
			parent: 'new_product',
			start: today + 13 * day,
			end: today + 17 * day
		}, {
			name: 'Launch',
			dependency: 'finalize',//依附的数据id
			parent: 'new_product',
			start: today + 17.5 * day,//开始时间
			milestone: true,
			owner: 'Peter'//归属的数据id
		}]
	}],
	tooltip: {
		pointFormatter: function () {
			var point = this,
				format = '%e. %b',
				options = point.options,
				completed = options.completed,
				amount = isObject(completed) ? completed.amount : completed,
				status = ((amount || 0) * 100) + '%', //准备进度
				lines;
			lines = [{
				value: point.name,
				style: 'font-weight: bold;'
			}, {
				title: 'Start',
				value: dateFormat(format, point.start)
			}, {
				visible: !options.milestone,
				title: 'End',
				value: dateFormat(format, point.end)
			}, {
				title: 'Completed',
				value: status
			}, {
				title: 'Owner',
				value: options.owner || 'unassigned'
			}];
			return reduce(lines, function (str, line) {
				var s = '',
					style = (
						defined(line.style) ? line.style : 'font-size: 0.8em;'
					);
				if (line.visible !== false) {
					s = (
						'<span style="' + style + '">' +
						(defined(line.title) ? line.title + ': ' : '') +
						(defined(line.value) ? line.value : '') +
						'</span><br/>'
					);
				}
				return str + s;
			}, '');
		}
	},
	title: {
		text: 'Gantt Project Management'
	},
	xAxis: {
		currentDateIndicator: true,
		min: today - 3 * day, //最小时间刻度
		max: today + 18 * day //最大时间刻度
	}
});

三 注解

	completed: {
				amount: 0.6,//完成数
				fill: '#e80'
			},//完成对象
	dependency: 'finalize',//依附的数据id
	parent: 'new_product',
	start: today + 17.5 * day,//开始时间
	milestone: true,
	owner: 'Peter'//归属的数据id
	status = ((amount || 0) * 100) + '%', //准备进度
	min: today - 3 * day, //最小时间刻度
	max: today + 18 * day //最大时间刻度
	。。。

结果:
在这里插入图片描述

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 中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值