【发布时间】:2014-05-08 11:04:46
【问题描述】:
我在我们的项目中使用 Highchart。我使用 AJAX 创建了一个向下钻取图表。但现在我喜欢制作一个更改图表类型的按钮,但图表保持在当前的向下钻取中,不需要重新加载。
function createBarDiagram(div,first,second,type,ytitle,title){
Highcharts.setOptions({lang: {drillUpText: '◁ Terug naar {series.name}'}});
if(type == 'pie'){
var options1 = {
tooltip: {pointFormat: 'Percentage: <b>{point.percentage:.1f}%</b><br>'},
xAxis: {categories: true}
};
}
if(type == 'column'){
var options1 = {
tooltip: {
pointFormat: 'Totaal: <b>{point.total}</b><br>'+
'Geel: <b>{point.1}</b><br>'+
'Grijs: <b>{point.2}</b><br>',
followPointer:true
},
xAxis: {
categories: true,
labels : { rotation: -90}
}
};
}
var options = {
yAxis: {title: {text: ytitle}},
chart: {height: 400,
events: {
drilldown: function(event) {
if (!event.seriesOptions) {
// save drilldown status
drilldown.push(event.point.name);
depth++;
// show public that the chart is loading by AJAX request
chart.showLoading('Laden ...');
// array for drilldown data
var drilldowndata = new Array;
var beginmaand = getStartOrEindmaand('start');
var eindmaand = getStartOrEindmaand('eind');
var jaar = $('select[name=jaar] option:selected').val();
var geel = $('input[name="geel"]').prop('checked');
var grijs = $('input[name="grijs"]').prop('checked');
// get data based on drilldown
$.ajax({
type: "POST",
async:false,
data:{drilldown:drilldown,type:drilldown[0],beginmaand:beginmaand,eindmaand:eindmaand,jaar:jaar,start:start,end:end,geel:geel,grijs:grijs},
url:base_url+'wagenparkoverzicht/getdrilldowndata/',
success: function(data){
// save the data in global array variabele
drilldowndata = JSON.parse(data);
}
});
chart.hideLoading();
chart.addSeriesAsDrilldown(event.point, drilldowndata);
// show breadcrump
var breadcrump = makeBreadCrump();
$('#'+div+'_breadcrump').html('('+breadcrump+')');
}
},
drillup: function(event) {
depth--;
drilldown.splice(depth,1);
}
}},
title: {text: title},
//drilldown: {series: second},
drilldown: {
series: []
},
legend: {enabled: false},
credits: {enabled: false},
plotOptions: {
series: {
dataLabels: {enabled: true},
shadow: false,
cursor: 'pointer',
point: {
events: {
click: function() { getDetailData(this);}
}
}
},
pie: {size: '70%'}
},
series: [{
name: 'overzicht',
colorByPoint: true,
data: first
}]
};
options = jQuery.extend(options, options1);
options.chart.renderTo = div;
options.chart.type = type;
var chart = new Highcharts.Chart(options);
return chart;
}
--- 编辑 ---
我在这个小提琴 (http://jsfiddle.net/tccpT/) 中找到了一些适用于我的示例。使用此功能时,图表从列到饼图的变化很好,但是当我单击更深然后单击返回时,图表会出现错误或显示两个图表。 1 列和馅饼..?
function changeType(series, newType) {
var dataArray = [],
points = series.data;
series.chart.addSeries({
type: newType,
name: series.name,
color: series.color,
data: series.options.data
}, false);
series.remove();
}
$('#toolbar button').click(function(){
charttype = $(this).attr('type');
var series = first.series[0],
newType = charttype;
changeType(series, newType);
});
【问题讨论】:
-
如果你在问题中包含 jsfiddle 会更容易
-
抱歉,这是个问题,因为我每次下钻都使用 ajax 请求。我已经在我的问题中添加了一些额外的信息,这可能会对您有所帮助..
标签: jquery highcharts