echarts折线图监听showtip后图例事件失效

  一、问题
  1、chart监听showtip后,点击图例无法更改series状态。
  2、一监听到showtip,图例的修改就会无效,series会恢复到上一次的状态。
  3、点击全选或反选后,会出现上一个问题(2、)。

  二、问题原因
  1、需要监听legendselectchanged事件并setOption()。
  2、图例处也有tooltip的显示,也会监听的showtip,也就是图例事件触发后一移动就会触发showtip事件重新setOption(),最好是在图例处不执行监听showtip里面的操作。
  3、原理同1、,需要监听legendselectall、legendinverdeselect设置setOption()。

  三、解决方法

		var that = this;

        //监听showtip给每条线设置markpoint
        this.myChart.on('showTip',function (params) {
                var isLegend = params.from;
                //图例部分也有tooltip的显示,也会被监听,需要判断不为图例时再进行以下操作以防止图例事件无效
                if(typeof(isLegend)=="undefined")
                {
                    var series = that.echartsOption.series;
                    let xindex=params.dataIndex;
                    for(let i=0;i<series.length;i++)
                    {
                        that.echartsOption.series[i].markPoint.data.splice(0,that.echartsOption.series[i].markPoint.data.length);//清空数组
                        let temp = that.echartsOption.series[i].data[xindex];
                        that.echartsOption.series[i].markPoint.data.push({ xAxis: xindex, yAxis: temp, name: 'num',value: temp});
                    }
                
                    //重新渲染
                    that.myChart.setOption(that.echartsOption);
                }
        });

        //showtip监听多次设置setoption后,图例事件失效
        this.myChart.on('legendselectchanged', function(params) {

            var qx_name = params.name;
			var select_key = Object.keys(params.selected);
			var select_value = Object.values(params.selected);
            //修改选中状态 需要在lengend里加上selected属性
			for(var i=0; i < select_key.length; i++){
				if(select_key[i] == qx_name){
					that.echartsOption.legend.selected[select_key[i]] = !that.echartsOption.legend.selected[select_key[i]];
				}
                // else{
				// 	option.legend.selected[select_key[i]] = true;
				// }
				
			}
            //需要重新设置option,不然一监听到showtip就会加载原来的option。如果第二个参数为true的话,表示不合并会删除原来组件,根据新的option创建,
            //没有或false表示合并
            that.myChart.setOption(that.echartsOption);

        });
 
        //点击全选或反选后,一监听到showtip,就会加载到原来的option,全选反选无效,需监听事件设置option
        //全选事件在selector设置为all时才会触发
        this.myChart.on('legendselectall', function(params) {
			var select_key = Object.keys(params.selected);
			var select_value = Object.values(params.selected);
            //修改选中状态
			for(var i=0; i < select_key.length; i++){
				that.echartsOption.legend.selected[select_key[i]] = true;
			}

            that.myChart.setOption(that.echartsOption);
        });

        this.myChart.on('legendinverseselect', function(params) {
			var select_key = Object.keys(params.selected);
			var select_value = Object.values(params.selected);
            //修改选中状态
			for(var i=0; i < select_key.length; i++){
				that.echartsOption.legend.selected[select_key[i]] = !that.echartsOption.legend.selected[select_key[i]];
			}

            that.myChart.setOption(that.echartsOption);
        });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值