echarts 多个legend设置selected时,legend需要单击两次才能切换状态

xu3bshqb  于 2022-11-03  发布在  Echarts
关注(0)|答案(9)|浏览(745)

在设置多个legend时,对每个legend设置selected,只有第一个legend的selected单击一次就能变换状态,后面的要变换状态需要单击两次

为了方便测试,直接修改 官网上的代码 Echarts 3,可以直接把这部分代码替换进去测试,用谷歌和IE均测试过。

官网链接:http://echarts.baidu.com/demo.html#candlestick-brush

官网code:

legend: {
            bottom: 10,
            left: 'center',
            data: ['Dow-Jones index', 'MA5', 'MA10', 'MA20', 'MA30']
        },

为了方便测试,只需要将下面的code替换掉官网的code就行了(注意标点符号)。

code1:
        legend: [{
            selected:{'MA5':false},
            bottom: 10,
            left: 'center',
            data: ['Dow-Jones index', 'MA5', 'MA10', 'MA20', 'MA30']
        },
        {selected:{'Volumn':false},
            data:['Volumn']
        }],

单击legend[0]中的灰色图例,单击一次就能更改状态,单击legend[1]中的灰色图例,需要单击两次才能更改状态,为了找出原因,更改顺序:

code2:
        legend: [
        {selected:{'Volumn':false},
            data:['Volumn']
        },
        {
            selected:{'MA5':false},
            bottom: 10,
            left: 'center',
            data: ['Dow-Jones index', 'MA5', 'MA10', 'MA20', 'MA30']
        }],

同样:单击legend[0]中的灰色图例,单击一次就能更改状态,但是单击legend[1]中的灰色图例,需要单击两次才能更改状态。
code2跟code1对比,只是更改了legend里面的两个子项的顺序,但是结果却不一样。

希望两个或者多个legend都能实现单击一次就能更改状态的效果

Other comments [其他信息]

7eumitmz

7eumitmz2#

我也遇到这个问题了,还没修复吗?

jpfvwuh4

jpfvwuh43#

同上,同样遇到这个问题

kuarbcqp

kuarbcqp6#

我也遇到了这个问题。请问目前有啥解决方案吗

2ul0zpep

2ul0zpep7#

天哪。 2022年遇到的问题原来在2017年就存在了

pkln4tw6

pkln4tw68#

天哪。 2022年遇到的问题原来在2017年就存在了

记得这个问题好像是处在多组legend时,且当前legend不是第一次点击时会出现,可以尝试维护一个一个点击过的legend name list,判断一下,是否被点击过,然后再决定是否dispatchActipn,和具体处罚哪个action,当legendSelectAll时,再清空维护的缓存数据

我当时应该是这么解决的,我的场景更复杂,是要legend点击效果跟highcharts那种的

仅供参考

hec6srdp

hec6srdp9#

楼上说的对,是在分组的时候第二组、第三组、、、第n组被禁止的会出现这个问题,解决方法是:
在第一组的selected里面先进行声明,在当前组再进行一次声明就可以了。目前使用版本@5.4.0
如下:重复声明Direct即可
`

legend: [
{
top: '10',
data: ['Email', 'Union Ads'],
selected: {
'Email': false,
'Direct': false
},
},
{
top: 30,
data: ['Video Ads', 'Direct', 'Search Engine'],
selected: {
Direct: false,
},
}
]

下面是动态legend时遍历的省事方法:

legend.forEach((item) => {
legend[0]['selected'] = {
...(legend[0]['selected'] || {}),
...(item.selected || {}),
};
});

`

相关问题