Javascript 高图表的高效多图表拖动选择
我已经使用Highcharts文档为图表启用了拖动选择。我试图扩展它,以便在我的第一张图表上选择的任何点,也将在页面上的其他图表上选择(x轴匹配) 我已经想出了一个方法来实现这一点&它对页面上的2个或3个高图表非常有效,但是当我选择了4个或更多高图表的多个点(每个图表总共约1500点)时,它会出现严重的延迟。 这可能是因为我使用了嵌套for循环,但我想知道是否有人有任何提高代码效率的技巧(或者这是否就是问题所在)。第一个功能是Highcharts文档中提供的功能;第二个函数(updateCharts())就是我使用的函数 我以前从来没有使用过highcharts,也没有用javascript编写过很多程序,所以我对这一切的工作原理还是有点不熟悉Javascript 高图表的高效多图表拖动选择,javascript,jquery,charts,highcharts,Javascript,Jquery,Charts,Highcharts,我已经使用Highcharts文档为图表启用了拖动选择。我试图扩展它,以便在我的第一张图表上选择的任何点,也将在页面上的其他图表上选择(x轴匹配) 我已经想出了一个方法来实现这一点&它对页面上的2个或3个高图表非常有效,但是当我选择了4个或更多高图表的多个点(每个图表总共约1500点)时,它会出现严重的延迟。 这可能是因为我使用了嵌套for循环,但我想知道是否有人有任何提高代码效率的技巧(或者这是否就是问题所在)。第一个功能是Highcharts文档中提供的功能;第二个函数(updateChar
function selectPointsByDrag(e) {
// Select points
Highcharts.each(this.series, function (series) {
Highcharts.each(series.points, function (point) {
if (point.x >= e.xAxis[0].min && point.x <= e.xAxis[0].max &&
point.y >= e.yAxis[0].min && point.y <= e.yAxis[0].max) {
point.select(true, true);
}
});
});
// Fire a custom event
Highcharts.fireEvent(this, 'selectedpoints', { points: this.getSelectedPoints() });
updateCharts(this);
return false; // Don't zoom
};
function updateCharts(curr_chart){
var count;
var counter;
var allChartArray = [chart, chart1, chart2, chart3];
var indexOfCurrentChart = allChartArray.indexOf(curr_chart);
if (indexOfCurrentChart > -1) {
allChartArray.splice(indexOfCurrentChart, 1);
};
bla = curr_chart.getSelectedPoints();
for(count = 0; count < allChartArray.length; count++){
for(counter = 0; counter < bla.length; counter++){
allChartArray[count].series[0].data[bla[counter].index].select(true, true)
};
};
};
函数选择指针缓冲器(e){
//选择点
Highcharts.each(本系列,函数系列){
Highcharts.each(系列点、功能点){
如果(point.x>=e.xAxis[0].min&&point.x=e.yAxis[0].min&&point.y使用浏览器探查器查看程序的哪个部分是滞后的原因。如果点的索引相同,则可以在同一循环中为其他图表选择点。不要使用getSelectedPoints()-每次调用时,需要循环所有点并对其进行过滤-而是创建一个数组并推送选定点(循环时)。您还可以设置一些处理动画、循环块等。如果不够,您可以执行一些数据预处理(kdtree)使用浏览器探查器,查看程序的哪个部分是滞后的原因。如果点的索引相同,则可以为同一循环中的其他图表选择点。不要使用getSelectedPoints()-每次调用它时,都需要循环所有点并对其进行过滤-而是创建数组并推送选定点(循环时)。您还可以设置一些处理动画、循环块等。如果不够,您可以执行一些数据预处理(kdtree)