AmCharts V4-悬停事件结束时,AmCharts使用哪种默认状态?

疯狂的科学家

我的目标是能够单击一个国家,并用特定颜色填充该国家的多边形背景。一旦选择另一个国家,以前的背景应恢复为标准颜色。

如何重现该错误:在代码笔上单击一个国家,然后单击另一个国家。现在,将鼠标悬停在第一个上,它将仍然处于“活动”状态。

当我仅单击国家/地区时,它确实起作用,但是将鼠标悬停在国家/地区上之后,它将使用特定颜色而不是标准颜色(就像选择了该颜色一样)。

这是codepen:https ://codepen.io/ms92o/pen/KBXqLO

以下是我创建的特定代码段:

我认为问题出在悬停效果结束后国家所处的状态。我认为默认状态将被使用,而我提供了标准的填充颜色。

var selectedPolygon;
polygonTemplate.events.on("hit", function(ev) {
let polygon = ev.target;
if(selectedPolygon) {
 selectedPolygon.defaultState.properties.fill = am4core.color("#74B266");
 selectedPolygon.setState('default');
}
polygon.setState('active');
selectedPolygon = polygon;
})

/* Create hover state and set alternative fill color */
var hs = polygonTemplate.states.create("hover");
hs.properties.fill = am4core.color("#367B25");

/* Create active state and set fill different fill color */
var as = polygonTemplate.states.create("active");
as.properties.fill = am4core.color("#FF0000");

所以我的问题是:悬停效果后多边形处于什么状态?

不兑现

通常,在将鼠标悬停时,精灵会返回到默认状态。

在这种情况下,这些行为是意外的,因为该自定义状态"active"实际上是保留名称state当您在此处选择其他图表中的多边形时使用它。而不是返回到默认值,而是返回到活动状态。为了避免在悬停状态,默认状态和活动状态之间造成混乱,"hoverActive"beta.45中引入了新状态

如果我们将状态名称/键更改为其他名称,则会发现该行为更可预期,因此"active"可以使用一些任意键重新构建代码,从而得到:

var customActiveState = "selectedCountry";
var selectedPolygon;
polygonTemplate.events.on("hit", function(ev) {
  /* NEW: Create an active state and set fill color to red */
  let polygon = ev.target;
  if(selectedPolygon) {
     selectedPolygon.defaultState.properties.fill = am4core.color("#74B266");
     selectedPolygon.setState('default');
  }
  polygon.setState(customActiveState);
  selectedPolygon = polygon;
})

/* Create hover state and set alternative fill color */
var hs = polygonTemplate.states.create("hover");
hs.properties.fill = am4core.color("#367B25");

/* Create active state and set fill different fill color */
var as = polygonTemplate.states.create(customActiveState);
as.properties.fill = am4core.color("#FF0000");

例如:https//codepen.io/team/amcharts/pen/477e8a80e09b4bf87128cd72cc082741

但这不是很有用,因为我们悬停时会立即失去红色。

因此,我们可以采取一些途径,更简单的方法是如何利用保留的活动状态并使它为您工作,或者几乎像您一直在做的那样管理defaultState。

方法1-利用SpritetogglableisActive属性(MapPolygons扩展)。

一旦精灵可切换,单击它会自动切换活动状态,因此我们将逻辑排除在命中事件之外,并且只需确保取消切换先前切换的国家即可:

var selectedPolygon;
polygonTemplate.events.on("hit", function(ev) {
  /* NEW: Create an active state and set fill color to red */
  let polygon = ev.target;
  if(selectedPolygon && selectedPolygon !== polygon) {
     selectedPolygon.isActive = false;
  }
  selectedPolygon = polygon;
})

/* Create hover state and set alternative fill color */
var hs = polygonTemplate.states.create("hover");
hs.properties.fill = am4core.color("#367B25");

/* Create active state and set fill different fill color */
var as = polygonTemplate.states.create("active");
as.properties.fill = am4core.color("#FF0000");

示例:https//codepen.io/notacouch/pen/259c803601ff6f286a294d1477f022ba

方法2-省略整个自定义活动状态,获取您已有的代码,并覆盖新选择的多边形的当前填充和默认状态填充(我们必须覆盖当前填充,因为如果您只是覆盖defaultState的填充,则必须等到您将鼠标悬停才能看到它):

var selectedPolygon;
polygonTemplate.events.on("hit", function(ev) {
  /* NEW: Create an active state and set fill color to red */
  let polygon = ev.target;
  if(selectedPolygon) {
     selectedPolygon.defaultState.properties.fill = am4core.color("#74B266");
     selectedPolygon.setState('default');
  }
  polygon.defaultState.properties.fill = polygon.fill = am4core.color("#FF0000");
  selectedPolygon = polygon;
})

/* Create hover state and set alternative fill color */
var hs = polygonTemplate.states.create("hover");
hs.properties.fill = am4core.color("#367B25");

示例:https//codepen.io/team/amcharts/pen/67121e27c3c1d50d669bca0ed040f746

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

amCharts 4(v4)在饼图中设置特定颜色

AmCharts v4 AmMap更改语言

AmCharts(V4)中的样式工具提示

amCharts V4映射中的clickMapObject方法

什么是amcharts 3向导等效于amcharts 4

AmCharts 4:网格步骤

如何在AmCharts V4中的ZoomControls上使用zoomFactor

在饼图中选择时,amcharts V4重定向到URL

无法禁用amcharts v4中的X轴标签

如何在amCharts v4中添加有关外部事件的系列?

如何从amCharts v4中的XYChartScrollbar删除系列?

如何在amcharts v4中突出显示单击时的单个栏

amcharts 4错误堆叠

Amchart V4在页面中将所有现有的Amcharts一起导出

为什么tooltipPosition =“ fixed”不起作用(amCharts v4)

amCharts 4中mapImage上的Click事件

如何在amCharts v4中有条件地设置颜色并使饼图切片渐变?

将单列悬停在amcharts 4中

在amMap中更新图像而不会失去缩放控制-AmCharts v4

自定义Amcharts v4工具提示边框颜色

AmCharts v4线图,开始日期轴晚1个月

将序列推入amCharts v4中的XYChartScrollbar后,该序列变得不可见

如何在amCharts v4中有条件地设置XY条形图上的属性?

如何在amcharts v4中通过json配置手动设置LineSeries的颜色?

Amcharts V4如何在不重新加载整个图表的情况下更改数据?

iOS 上的 AmCharts:导出时范围未正确显示(Ionic App、AmCharts 4)

amCharts (V4):DateAxis 中没有年份的第一个月格式

如何在 AMCharts v4 CategoryAxis 的各个类别上注册事件处理程序

Amcharts V4 使用 valueYShow 以百分比而不是绝对值显示图表