首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在图4中选择单列

在图4中选择单列
EN

Stack Overflow用户
提问于 2019-03-06 10:41:45
回答 1查看 573关注 0票数 1

如何在amCharts 4的列图中高亮显示单个列并取消选择先前突出显示的列?

在高亮显示目标列的颜色之前,我试图更改所有列的颜色,但它不能正常工作。

代码语言:javascript
复制
series.columns.template.events.on("hit", function(ev) {
    ev.target.fill = am4core.color("red");
    chart.invalidate();
});

JsFiddle

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-06 16:00:30

为此,您可以使用active状态:

代码语言:javascript
复制
var activeState = series.columns.template.states.create("active");
activeState.properties.fill = am4core.color('red');

hit事件中,您现在可以将列设置为active。如果缓存最后选定的列,则可以在将新列设置为active之前重置active状态:

代码语言:javascript
复制
var currentActive;
series.columns.template.events.on("hit", function(ev) {
  if (currentActive) {
    currentActive.isActive = false;
  }
  currentActive = ev.target;
  currentActive.isActive = true;
});

如果不想缓存最后一个选择,只需在设置新列之前禁用所有列:

代码语言:javascript
复制
series.columns.template.events.on("hit", function(ev) {
  series.columns.values.forEach(c => c.isActive = false);
  ev.target.isActive = true;
});

如果希望再次取消所有列的选择,可以使用第二种方法并对其进行一些扩展:

代码语言:javascript
复制
series.columns.template.events.on("hit", function(ev) {
  series.columns.values
    .filter(c => c !== ev.target)
    .forEach(c => c.isActive = false);
  ev.target.isActive = !ev.target.isActive;
});

这里是显示最后一种行为的代码笔。你只需要替换最后一点就可以使用其他选项了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55021098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档