highcharts扩展tooltip提示异步信息

本人博客开始迁移,博客整个架构自己搭建及编码 http://www.cookqq.com


highcharts方面的知识很多:

http://api.highcharts.com/highcharts

http://www.highcharts.com/

http://www.52wulian.org/highcharts_api/

现在来看看我们项目中的需求吧,先明白需求才能改进啊。


当你移动到一个数据点的时候,tooltip自动提示相应的信息。但是项目中需要异步获取对此数据点的评论然后显示。

实现需求的步骤:

(0)API文档HighCharts结构如下

var chart = new Highcharts.Chart({

  chart: {…}        // 配置chart图表区

  colors: [{...}]    // 配置主体显示颜色(多个线条和柱体的颜色顺序的)

  credits: {…}      // 配置右下角版权链接

  exporting: {…}  	  // 配置导出及打印

  global: {…}       // HighCharts国际化方法调用

  labels: {…}       // HTML标签,可以放置在绘图的任何位置

  lang: {…}        	 // 语言对象属性配

  legend: {…}       // 配置图例选项

  loading: {…}    	  // 配置图表加载选项

  navigation: {…}   // 配置导出按钮属性

  pane: {…}        	 // 仅适用于极性图表和角仪表

  plotOptions: {…}  // 配置数据点选项

  series: [{...}]   // 配置数据列选项

  subtitle: {…}     // 配置副标题

  title: {…}        // 配置标题

  tooltip: {…}      // 配置数据点提示框

  xAxis: {…}        // 配置x轴选项

  yAxis: {…}        // 配置y轴选项

})

(1)研究tooltip相应的属性:

参数名说明默认值
enable是否显示提示框true
backgroundColor设置提示框的背景色“top”
borderColor提示框边框颜色“auto”
borderRadius提示框圆角度/td>5
stylecss样式

style: {
color: ‘#333333′,

fontSize: ’9pt’,
padding: ’5px’}

formatter

回调函数,用于格式化输出提示框的显示内容

返回的内容支持html标签如:<b>, <strong>,<br/>

 

主要的参数formatter:

formatter: function() {
                            return '<b>'+ this.series.name +'</b><br/>'+
                            Highcharts.dateFormat('%Y-%m-%d', this.x) +': '+ this.y ;
                    }

这就是tooltip提示信息的内容。那要是直接把异步获取的信息的代码直接加到其中不就行了?

获取数据时异步的,tooltip中的formatter直接就返回值了,并没有等待异步加载的数据。

(2)既然直接向tooltip增加内容不可以,可以自己写一个div,然后显示评论信息,div然后随着数据点位置的改变而改变而改变位置。

highcharts的events只有click,mouseOver,mouseOut事件。

步骤:

(3)首先自己写个div

<div id="reporting"></div>

(4)div的样式

<style>
#reporting {
    position: absolute; 
    top: 35px; 
    right: 20px; 
text-align:left;
border:1px solid #c7bf93;
border-radius:4px;
-moz-border-radius:4px;
-webkit-border-radius:4px;
padding:6px 8px;
min-width:50px;
max-width:225px;
color:#000;
background-color:#fff9c9;
}
</style>


(5)重写 mouseOver(主要就是获取数据,并且显示),  mouseOut(隐藏div)事件

mouseOver: function() {
                                	                                	var itemPriceId2 = map1.get(this.series.name);
                                	var pointer = this;
                                	//var tooltip = pointer.series.tooltipPoints;
                                	
                                    $.post("<%=request.getContextPath()%>/calculator/listJsonCalComment.action", 
                                   		 {itemid :itemPriceId2,type:'2', dataDate : Highcharts.dateFormat('%Y-%m-%d', this.x) }, 
                                   		 function(data){
                                   		 	$("#reporting").html(data);
                                   		 	var left = pointer.plotX-110;
                                   		 	if(left <0){
                                   		 		left =0;
                                   		 	}
                                   			$("#reporting").css("left",left + "px"); 
                                   			$("#reporting").css("top",pointer.plotY+75 + "px");
                                   			$("#reporting").show();
                                    	},'html');
                                },
                                mouseOut: function() {
                                	                                	$("#reporting").hide();
                                	
                                }

注意:后获取数据点位置的时候,废了很大的劲,这方面的资料很少,只能自己研究highcharts的源码。

pointer.x是x轴的值,pointer.y是y轴的值,和位置并没有任何关系。

pointer.plotX,pointer.plotY是数据点的位置。本来一开始想获取tooltip的位置,搞了半天发现tooltip相应信息保存到tooltipPoints数组中,tooltipPoints是一个对象,里面保存了每一个数据点的tooltip提示信息的属性。难点是还需要研究index值是怎么来的,获取数据点相应的tooltip在tooltipPoints索引

(6)默认的div隐藏

$(document).ready(function() {
    	//首先隐藏评论信息的显示区
    	$("#reporting").hide();
});

好了,现在看看样子吧:


 


 


 


 


转载于:https://my.oschina.net/winHerson/blog/159655

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值