highcharts - 在网络图中悬停时覆盖默认突出显示
问题描述
我通过固定每个节点的初始位置来使用网络图绘制二叉树。
如果我将鼠标悬停在一个节点上,它会突出显示默认连接到该节点的每个节点。
如何覆盖它以仅突出显示先行节点(即从右到左通过从悬停节点返回到最左侧单个节点的路径)。
我尝试在连接到悬停节点的链接末端拾取前两个节点,并不断迭代,直到没有更多的先行节点,但它没有解决。
function iterateBack(node) {
console.log("Node " + node.id);
var previousNodes = node.linksTo
if (previousNodes != null) {
previousNodes.forEach(function(l) {
var precedingNode = l.fromNode;
precedingNode.update({
//color: 'black',
active: true
});
iterateBack(precedingNode);
});
}
}
Highcharts.chart('container', {
tooltip: {
enabled: false
},
credits: {
enabled: false
},
chart: {
type: 'networkgraph',
margin: 20,
height: '100%',
},
plotOptions: {
series: {
cursor: 'crosshair',
stickyTracking: false,
point: {
events: {
mouseOver: function() {
//this.active = true;
iterateBack(this);
this.linksFrom.forEach(function(l) {
l.update({
active: false
});
});
},
mouseOut: function() {
this.linksTo.forEach(function(l) {
l.update({
active: false
});
});
this.linksFrom.forEach(function(l) {
l.update({
active: false
});
});
}
}
},
}
},
series: [{
marker: {
radius: 15,
lineWidth: 2,
lineColor: 'black',
},
layoutAlgorithm: {
maxIterations: 1,
initialPositions: function() {
var chart = this.series[0].chart,
width = chart.plotWidth,
height = chart.plotHeight;
this.nodes.forEach(function(node, i) {
var initialX = 0;
var initialY = 500;
var distance = 80;
var identifiers = node.id.split(",");
var round = identifiers[0] - 1;
var level = identifiers[1] - 1;
node.plotX = initialX + (round * distance * 2);
node.plotY = initialY - (round * distance) + (level * 2 * distance);
});
}
},
keys: ['from', 'to'],
data: [
['1,1', '2,1', 'win'],
['1,1', '2,2', 'win'],
['2,1', '3,1', 'win'],
['2,1', '3,2', 'lose'],
['2,2', '3,2', 'win'],
['2,2', '3,3', 'lose'],
['3,1', '4,1', 'win'],
['3,1', '4,2', 'lose'],
['3,2', '4,2', 'win'],
['3,2', '4,3', 'lose'],
['3,3', '4,3', 'win'],
['3,3', '4,4', 'lose'],
['4,1', '5,1', 'win'],
['4,1', '5,2', 'lose'],
['4,2', '5,2', 'win'],
['4,2', '5,3', 'lose'],
['4,3', '5,3', 'win'],
['4,3', '5,4', 'lose'],
['4,4', '5,4', 'win'],
['4,4', '5,5', 'lose'],
['5,1', '6,1', 'win'],
['5,1', '6,2', 'lose'],
['5,2', '6,2', 'win'],
['5,2', '6,3', 'lose'],
['5,3', '6,3', 'win'],
['5,3', '6,4', 'lose'],
['5,4', '6,4', 'win'],
['5,4', '6,5', 'lose'],
['5,5', '6,5', 'win'],
['5,5', '6,6', 'lose']
],
nodes: [{
id: '1,1'
},
{
id: '2,1'
},
{
id: '2,2'
},
{
id: '3,1'
},
{
id: '3,2'
},
{
id: '3,3'
},
{
id: '4,1'
},
{
id: '4,2'
},
{
id: '4,3'
},
{
id: '4,4'
},
{
id: '5,1'
},
{
id: '5,2'
},
{
id: '5,3'
},
{
id: '5,4'
},
{
id: '5,5'
},
{
id: '6,1'
},
{
id: '6,2'
},
{
id: '6,3'
},
{
id: '6,4'
},
{
id: '6,5'
},
{
id: '6,6'
}
],
}]
})
解决方案
setState
从网络图点类原型覆盖默认方法,并iterateBack
在鼠标悬停事件中使用您的函数。
(function(H) {
H.seriesTypes.networkgraph.prototype.pointClass.prototype.setState = function() {
H.Point.prototype.setState.apply(this, arguments);
}
}(Highcharts));
现场演示: https ://jsfiddle.net/BlackLabel/ua72mrqp/
文档: https ://www.highcharts.com/docs/extending-highcharts/extending-highcharts
推荐阅读
- jenkins - 在同一硬件上编排一系列几乎相同的构建的最佳方式
- python - 反向字符串省略特殊字符和数字
- reactjs - React Native 升级重复符号问题
- python - 循环遍历函数参数以创建 power point 演示文稿
- gradle - 项目“cocoapods”未与 Gradle 链接
- python - 在这个代码示例中,unittest 计算了哪些测试?
- delphi - 这个 FastMM4 无效指针异常是 Delphi 5 的 FastMM 中的一个错误吗?
- javascript - adob animate JS 无法在画布上绘制
- angular - 主动侧边栏药丸不再有效
- bash - 当其中的程序退出时,关闭从 bash 打开的终结者终端