highchart实现放大缩小zoom功能(转…

原文地址:http://www.stepday.com/topic/?800 

当我们将图表某个区域放大值某一个倍数后发现刻度间隔距离也放大了,由于刻度间隔还是原来初始所设定的值,从而让局部数据的X轴刻度不是很清楚,虽然我们可以将鼠标移动至数据点上进行查看,但是很费事。所以就希望做到放大后能够逐渐减小X轴刻度间隔,图表回到初始值后重新设置原始的坐标刻度间隔。这样一来就能够很友好地响应用户的浏览体验了。

highcharts图表高级入门:图表放大(zoomType)后动态设置X轴刻度间隔(tickInterval)且还原后回到原始状态示例

于是产生了两个疑问:

1、图表放大时如何动态修改X轴的刻度间隔(tickInterval);

2、图表Reset zoom按钮点击后如何捕获这个动作从而让其刻度间隔(tickInterval)设置为初始值。

解决方案:

一、何时动态修改X周刻度间隔

我们通过监听chart的selection选择事件,只要用户选择了图表区域,图表将会放大,所以我们在这个事件内实现图表刻度的缩小:


01.
DynamicChangeTickInterval(1);
1. //动态修改xAxis的刻度间隔值
2. function DynamicChangeTickInterval(interval) {
3. chart.xAxis[0].update({
4. tickInterval: interval
5. });
6. }

二、如何监听图表Reset zoom按钮事件

图表放大后将会显示一个还原图表的按钮,当用户点击此按钮后图表将会redraw重画,但是刻度间隔不会还原至初始值,所以我们需要重写Highcharts图表的这个按钮事件,通过检查源码得知其按钮所调用的方法为:zoomOut

这样一来就已经达到我们的目标了,最后贴上示例的完整代码:

01.
02. <</code>html>
03. <</code>head>
04. <</code>meta http-equiv="Content-Type" content="text/html; charset=utf-8">
05. <</code>title>Highcharts Example</</code>title>
06. <</code>script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></</code>script>
07. <</code>script type="text/javascript">
08. var chart = null;
09. var OldInterval = 3;
10. $(function () {
11. //设置初始值
12. Highcharts.setOptions({
13. lang: {
14. resetZoom: "返回",
15. resetZoomTitle: "回到初始状态"
16. }
17. });
18.  
19. $('#container').highcharts({
20. chart: {
21. type: 'line',
22. zoomType: 'x',
23. events: {
24. //监听图表区域选择事件
25. selection: function () {
26. //动态修改
27. DynamicChangeTickInterval(1);
28. }
29. }
30. },
31. title: {
32. text: "图表放大后动态设置X轴刻度间隔且还原后回到原始状态示例"
33. },
34. xAxis: {
35. tickInterval: OldInterval //默认间隔值为3
36. },
37. credits: {
38. text: "www.stepday.com",
39. href: "http://www.stepday.com",
40. style: {
41. color:"red"
42. }
43. },
44. series: [{
45. data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
46. }]
47. }, function (chartObj) {
48. //获得图表对象
49. chart = chartObj
50. });
51. //扩展或者重写Highcharts图表组件的方法
52. ExtendHighcharts();
53. });
54.  
55. //动态修改xAxis的刻度间隔值
56. function DynamicChangeTickInterval(interval) {
57. chart.xAxis[0].update({
58. tickInterval: interval
59. });
60. }
61.  
62. //扩展或者重写Highcharts图表组件的方法
63. function ExtendHighcharts() {
64. Highcharts.extend(Highcharts.Chart.prototype, { zoomOut: function () {
65. //还原图表X轴的间隔
66. DynamicChangeTickInterval(OldInterval);
67. //还原图表初始状态
68. this.zoom();
69. }
70. });
71. }
72. </</code>script>
73. </</code>head>
74. <</code>body>
75. <</code>script src="../js/highcharts.js"></</code>script>
76. <</code>div id="container" style="width: 500px; height: 400px; margin: 0 auto">
77. </</code>div>
78. </</code>body>
79. </</code>html>

三、最终演示效果

效果查看地址请访问:http://jsfiddle.net/sTWSL/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值