what best approach extend show() , hide() functions in highcharts?
i want add boolean-like show(effectlinkedseries)
, hide(effectlinkedseries)
, can control when linkedseries gets removed or added along "parent". here demo of linkedseries functionality. property called "linkedto" sets functionality:
series: [{ name: 'temperature', data: averages, zindex: 1, marker: { fillcolor: 'white', linewidth: 2, linecolor: highcharts.getoptions().colors[0] } }, { name: 'range', data: ranges, type: 'arearange', linewidth: 0, linkedto: ':previous', color: highcharts.getoptions().colors[0], fillopacity: 0.3, zindex: 0 }]
i modify source directly i'd rather try extend library, instead of hacking it.
figured out can make use of highcharts.series.prototype accomplish this
highcharts.series.prototype.setvisible = function (vis, redraw, effectlinkedseries) { var series = this, chart = series.chart, legenditem = series.legenditem, showorhide, ignorehiddenseries = chart.options.chart.ignorehiddenseries, oldvisibility = series.visible; // if called without argument, toggle visibility series.visible = vis = series.useroptions.visible = vis === highcharts.undefined ? !oldvisibility : vis; showorhide = vis ? 'show' : 'hide'; // show or hide elements highcharts.each(['group', 'datalabelsgroup', 'markergroup', 'tracker'], function (key) { if (series[key]) { series[key][showorhide](); } }); // hide tooltip (#1361) if (chart.hoverseries === series || (chart.hoverpoint && chart.hoverpoint.series) === series) { series.onmouseout(); } if (legenditem) { chart.legend.colorizeitem(series, vis); } // rescale or adapt resized chart series.isdirty = true; // in stack, other series affected if (series.options.stacking) { highcharts.each(chart.series, function (otherseries) { if (otherseries.options.stacking && otherseries.visible) { otherseries.isdirty = true; } }); } // show or hide linked series highcharts.each(series.linkedseries, function (otherseries) { if (effectlinkedseries === true) { otherseries.setvisible(vis, false); } }); if (ignorehiddenseries) { chart.isdirtybox = true; } if (redraw !== false) { chart.redraw(); } highcharts.fireevent(series, showorhide); }; // end highcharts.series.prototype.setvisible highcharts.series.prototype.show = function (effectlinkedseries) { this.setvisible(true,undefined,effectlinkedseries); }; highcharts.series.prototype.hide = function (effectlinkedseries) { this.setvisible(false,undefined,effectlinkedseries); };
Comments
Post a Comment