- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个场景,在一个“图表”中最多可以有 6 个不同的饼图。我们想要的是允许用户单击图例项并使其影响包含该项的所有饼图。某些图表可能只有一个具有任意值的切片,但全部共享相同的基本类别集。使用此answer中完成的工作我能够对两个饼图执行此操作。但除此之外,我只能得到一个切片隐藏/显示的馅饼。
这是执行 legendGroup(或 legendItem - 我都尝试过)的代码部分:
var newChart = new Highcharts.Chart(options, function(chart) {
$(chart.series[0].data).each(function(i, e) {
console.log(chart.series[0].data);
e.legendGroup.on('click', function(event) {
var legendItem = e.name;
console.log(legendItem);
event.stopPropagation();
$(chart.series).each(function(j, f) {
$(this.data).each(function(k, z) {
if (z.name == legendItem) {
if (z.visible) {
z.setVisible(false);
} else {
z.setVisible(true);
}
}
});
});
});
});
});
如您所见,console.log(legendItem);
没有出现。看起来更新的点击事件没有被捕获。
如何使这个图例单击隐藏/显示该项目的所有饼图中的切片?当您将鼠标悬停在图例项上时,如何在饼图中允许悬停效果的奖励。
完整jsFiddle代码:
var options = {
chart: {
type: 'pie',
renderTo: 'container',
width: null,
height: 800,
events: {
load: function() {
var chart = this;
var currWidth = chart.chartWidth;
var currHeight = chart.chartHeight;
var seriesList = chart.series;
var seriesCount = seriesList.length;
var piesize = CalcSize(currWidth, currHeight, seriesCount);
var numCols;
var numRows;
var locArray = [];
if (seriesCount == 6) {
numCols = 2;
numRows = 3;
for (nR = 0; nR < numRows; nR++) {
for (nC = 0; nC < numCols; nC++) {
if (locArray.length <= seriesCount - 1) {
locArray.push([((piesize / 2) + (piesize * nC)) + 60, (piesize / 2) + (piesize * nR)])
}
}
}
} else {
numCols = currWidth / piesize;
numRows = Math.floor(currHeight / piesize);
for (nR = 0; nR < numRows; nR++) {
for (nC = 0; nC < numCols; nC++) {
if (locArray.length <= seriesCount - 1) {
locArray.push([(piesize / 2) + (piesize * nC), ((piesize / 2) + (piesize * nR)) - 75])
}
}
}
}
locArray.sort();
$(seriesList).each(function(j) {
seriesList[j].update({
size: piesize,
center: locArray[j]
})
});
//console.log(currWidth);
//console.log(currHeight);
//console.log(seriesCount);
//console.log(piesize);
//console.log(numCols);
//console.log(numRows);
//console.log(locArray);
//console.log(seriesList);
},
resize: function() {
var chart = this;
$(seriesList).each(function(j) {
seriesList[j].update({
center: [chart.series[0].data[1].plotX - 20, chart.series[0].data[1].plotY - 65]
})
});
}
}
},
title: {
text: null
},
xAxis: {
categories: ['Not Specified', 'Entry Level', 'Less than 1 year', '1 Year to 2 Years', '2 Years to 5 Years', '5 Years to 10 Years', 'More than 10 Years'],
labels: {
style: {}
}
},
series: [{
name: 'Chattanooga, TN-GA MSA',
visible: true,
showInLegend: true,
dataLabels: {
enabled: false
},
tooltip: {
valueDecimals: null,
valuePrefix: null,
valueSuffix: null
},
data: [
['Not Specified', 12],
['Entry Level', 1],
['Less than 1 year', 0],
['1 Year to 2 Years', 0],
['2 Years to 5 Years', 4],
['5 Years to 10 Years', 1],
['More than 10 Years', 0]
]
}, {
name: 'Jackson, TN MSA',
visible: true,
showInLegend: false,
dataLabels: {
enabled: false
},
tooltip: {
valueDecimals: null,
valuePrefix: null,
valueSuffix: null
},
data: [
['Not Specified', 1],
['Entry Level', 0],
['Less than 1 year', 0],
['1 Year to 2 Years', 0],
['2 Years to 5 Years', 2],
['5 Years to 10 Years', 0],
['More than 10 Years', 0]
]
}, {
name: 'Kingsport-Bristol-Bristol, TN-VA MSA',
visible: true,
showInLegend: false,
dataLabels: {
enabled: false
},
tooltip: {
valueDecimals: null,
valuePrefix: null,
valueSuffix: null
},
data: [
['Not Specified', 0],
['Entry Level', 0],
['Less than 1 year', 0],
['1 Year to 2 Years', 1],
['2 Years to 5 Years', 2],
['5 Years to 10 Years', 0],
['More than 10 Years', 0]
]
}, {
name: 'Knoxville, TN MSA',
visible: true,
showInLegend: false,
dataLabels: {
enabled: false
},
tooltip: {
valueDecimals: null,
valuePrefix: null,
valueSuffix: null
},
data: [
['Not Specified', 27],
['Entry Level', 2],
['Less than 1 year', 0],
['1 Year to 2 Years', 1],
['2 Years to 5 Years', 4],
['5 Years to 10 Years', 0],
['More than 10 Years', 0]
]
}, {
name: 'Memphis, TN-MS-AR MSA',
visible: true,
showInLegend: false,
dataLabels: {
enabled: false
},
tooltip: {
valueDecimals: null,
valuePrefix: null,
valueSuffix: null
},
data: [
['Not Specified', 45],
['Entry Level', 18],
['Less than 1 year', 0],
['1 Year to 2 Years', 14],
['2 Years to 5 Years', 31],
['5 Years to 10 Years', 2],
['More than 10 Years', 0]
]
}, {
name: 'Nashville-Davidson--Murfreesboro, TN MSA',
visible: true,
showInLegend: false,
dataLabels: {
enabled: false
},
tooltip: {
valueDecimals: null,
valuePrefix: null,
valueSuffix: null
},
data: [
['Not Specified', 176],
['Entry Level', 10],
['Less than 1 year', 0],
['1 Year to 2 Years', 16],
['2 Years to 5 Years', 31],
['5 Years to 10 Years', 3],
['More than 10 Years', 0]
]
}],
tooltip: {
useHTML: false,
hideDelay: 75,
valuePrefix: null,
valueSuffix: null
},
subtitle: {
text: null
},
plotOptions: {
pie: {
allowPointSelect: true,
borderWidth: 0,
dataLabels: {
enabled: false
}
}
}
};
function CalcSize(width, height, numberCharts) {
var number = numberCharts; // Example-Number
var width = width;
var height = height;
var area = height * width;
var elementArea = parseInt(area / number);
// Calculate side length if there is no "spill":
var sideLength = parseInt(Math.sqrt(elementArea));
// We now need to fit the squares. Let's reduce the square size
// so an integer number fits the width.
var numX = Math.ceil(width / sideLength);
sideLength = width / numX;
while (numX <= number) {
// With a bit of luck, we are done.
if (Math.floor(height / sideLength) * numX >= number) {
// They all fit! We are done!
return sideLength;
}
// They don't fit. Make room for one more square i each row.
numX++;
sideLength = width / numX;
}
// Still doesn't fit? The window must be very wide
// and low.
sideLength = height;
return sideLength;
}
var newChart = new Highcharts.Chart(options, function(chart) {
$(chart.series[0].data).each(function(i, e) {
console.log(chart.series[0].data);
e.legendGroup.on('click', function(event) {
var legendItem = e.name;
console.log(legendItem);
event.stopPropagation();
$(chart.series).each(function(j, f) {
$(this.data).each(function(k, z) {
if (z.name == legendItem) {
if (z.visible) {
z.setVisible(false);
} else {
z.setVisible(true);
}
}
});
});
});
});
});
最佳答案
出于某种原因(可能是错误)legendItemClick
不会针对饼图系列触发(这将是处理此自定义行为的适当位置)。
作为解决方法,我覆盖了核心函数Highcharts.Legend.prototype.setItemEvents
并在那里实现了所需的功能:https://jsfiddle.net/kkulig/236gpt4s/
// custom code - handle categories
item.series.chart.series.forEach(function(s) {
s.points.forEach(function(p) {
if(p.name === item.name) {
p.setVisible();
}
});
});
关于javascript - 单击单个图例项的变量数据的多个饼图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48189744/
我在选项卡中有我的网络应用程序的选项。 aaa bbb ccc ddd eee 当用户单击任何选项卡(在同一窗口中)时,我会使用此代码获得淡出效果,然后自动
如何获得一个简单的调用单击来实现如下功能:http://jsfiddle.net/ftwPS/6/我显然错过了一些基本的东西,因为当您单击“CLICK”时这不起作用。 $('tr').click(fu
我有一个列表,在左侧显示一个插入符号图标,单击它时应该更改图标。每当我单击一个图标时,所有图标都会更改。 detailedInfo = []; subordinateInfo; openSu
我有一个 div,我想对其进行设置,以便当我单击其他内容时,它会隐藏该 div。 我也是这样 $('body').click(function(){ if(loginOpened) {
我有很多装有不同内容的盒子。 如果单击第一个框,您可以看到一个包含更多详细信息的弹出框。如果单击第二个、第三个等框,您必须查看这些框的详细信息。 我的问题:如果我点击框号。 2 我看到了盒子号的详细信
当我点击 .add-btn 时,我将 .add-btn 的样式更改为 background:#cccccc 并将 val() 更改为“-”。 现在当我用 tr td .list 删除添加的文本时,它是
感谢 SO 的出色贡献者!当您开始了解 jQuery 时,它会变得更酷。 :) 所以我有一个 LI,单击时会显示/隐藏子 UL。我想做的是能够单击 LI 内的链接,打开一个空白窗口,但也不会关闭子 U
我有这份文档,它使我能够获得一份带有点击进度的多项选择选择调查问卷。 如何用图像代替此处的文字? (并且仍然有这样的机制,一旦单击[图像],就会提出下一个问题) 我已经尝试使用 UL/H1 设置背景图
我想在 JQGrid 的刷新按钮单击上编写代码。有什么事件吗? 最佳答案 如果您需要在开始刷新之前执行一些操作,您应该使用 beforeRefresh打回来: $("#grid_id").jqGrid
问题是将对象或多个参数从模板传递到组件,并使用它们将数据添加到 API。 任务.service.ts addTasks(task: Task): Observable{ let headers =
我有一个像这样的primefaces选项卡 View : This tab has static content. this t
我在 jquery 中有一个有效的 a.click() 函数...但是如果我单击一个 anchor ,我会打开一个新窗口...但是我怎样才能阻止浏览器本身打开一个新窗口? 示例: $('a')
有没有简单的方法来创建代码:如果 URL 更改或单击链接显示 div(例如加载 gif 3 秒),则显示页面?有点像空白的白色页面,加载 gif 旋转 3 秒然后显示页面? 谢谢! 最佳答案 给定 G
我需要知道此时按钮的状态是否被点击? 谢谢 最佳答案 if (myButton.state & UIControlStateHighlighted) { // Do your stuff the
我正在 NSImageView 上绘制一条 NSBezierPath 线。我正在创建 NSBezierPath 对象,设置 moveToPoint,设置 lineToPoint,设置 setLineW
我的 Selenium 代码存在问题,无法正确执行按键 + 单击操作。 测试应打开 jqueryui.com 链接并选择页面上的前 2 个 li 元素。 我正在使用 Selenium 2.23 和 F
单击时我将更改字符串一部分的样式。例如“TEXT”,然后单击“T”,之后它会将样式从黑色更改为红色,仅 T在我的代码中,当我单击文本时,我拆分文本并保留在“split”数组中,它将调用handleCl
我在网站上有一个 anchor 。当有人点击它时,我在 jquery 中执行一些操作并更改名称,但是当再次单击它时,事件被触发,尽管我已经更改了它的名称。代码在这里: $(".like_cont a[
我有一个下载链接Download我希望每次当有人点击“下载”时,我都可以将其插入数据库total_downloads+1。为了插入数据库,我通常使用 然后 if (isset($_POST['d
我是一名优秀的程序员,十分优秀!