echarts 自定義、覆蓋legend點擊事件,禁用legend默認的點擊行爲

有一個需求場景,使用echarts時想要自定義legend的點擊事件,但是不要legend的默認點擊事件——就是點擊會隱藏和顯示對應的餅圖

查閱文檔和手冊之後,發現沒有可以直接使用的方法

那麼換個思路,在默認事件觸發之後再把取消選中的legend選中回來就可以啦

依賴以下下幾個配置:

1. legendselectchanged

myChart.on('legendselectchanged', function (params) {
    // ...
});

監聽legend點擊改變的事件,可以實現自定義事件,但是不能覆蓋默認的選中和取消選中的事件

2. selected

option = {
	tooltip: {
	    selected: {
			// ...
		},
	    // ...
	},
	//...
}

可以設置初始選中項,這裏不會直接使用

3. setOption

myChart.setOption({
	legend:{
		selected:{
			//...
		}
})

動態改變配置,到這裏就很清晰了,將 legendselectchanged 中取消選中的legend動態設置回來

4. animation

option = {
    animation: false,
	//...
}

如果對動畫沒要求,關閉動畫,效果會更好

完整html代碼

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>ECharts 實例</title>
    <script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
</head>

<body>
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        var myChart = echarts.init(document.getElementById('main'));
        option = {
            animation: false, // 取消動畫
            tooltip: {
                trigger: 'item',
                formatter: '{a} <br/>{b}: {c} ({d}%)'
            },
            legend: {
                orient: 'vertical',
                left: 10,
                data: ['直接訪問', '郵件營銷', '聯盟廣告', '視頻廣告', '搜索引擎']
            },
            series: [
                {
                    name: '訪問來源',
                    type: 'pie',
                    radius: ['50%', '70%'],
                    avoidLabelOverlap: false,
                    label: {
                        show: false,
                        position: 'center'
                    },
                    emphasis: {
                        label: {
                            show: true,
                            fontSize: '30',
                            fontWeight: 'bold'
                        }
                    },
                    labelLine: {
                        show: false
                    },
                    data: [
                        {value: 335, name: '直接訪問'},
                        {value: 310, name: '郵件營銷'},
                        {value: 234, name: '聯盟廣告'},
                        {value: 135, name: '視頻廣告'},
                        {value: 1548, name: '搜索引擎'}
                    ]
                }
            ]
        };
        myChart.setOption(option);
        // 關鍵代碼
        myChart.on('legendselectchanged', function (params) {
            myChart.setOption({
                legend:{selected:{[params.name]: true}}
            })
            console.log('點擊了', params.name);
            // do something
        });
    </script>
</body>

</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章