ECharts 中的事件和行为实现 之 click事件

一、前言

在 ECharts 的图表中用户的操作将会触发相应的事件。开发者可以监听这些事件,然后通过回调函数做相应的处理,

比如跳转到一个地址,或者弹出对话框,或者做数据下钻等等。

下面一起来实现一下最常用的 click 事件 !!!

好文章 记得收藏+点赞+关注额 !!!

---- Nick.Peng


二、简介

  • 在 ECharts 中事件分为两种类型:
    • 一种是用户鼠标操作点击,或者 hover图表的图形时触发的事件;
    • 另一种是用户在使用可以交互的组件后触发的行为事件,例如在切换图例开关时触发的 legendselectchanged事件(这里需要注意切换图例开关是不会触发legendselected事件的),数据区域缩放时触发的 datazoom 事件等等;
  • 常见的事件类型:
    • clickdblclickmousedownmousemovemouseupmouseovermouseoutglobaloutcontextmenu 事件等;

三、Click事件实现步骤

  • 具体步骤如下
    <script>
    	// 1. 基于准备好的dom,初始化ECharts实例
    	var myChart = echarts.init(document.getElementById('main'));
    	
    	// 2. 指定图表的配置项和数据
    	var option = {
    		......
    	};
    	// 3. 使用刚指定的配置项和数据显示图表。
    	myChart.setOption(option);
    	// 4. 处理点击事件并且跳转到相应的百度搜索页面
    	myChart.on('click', function (params) {
    	    // 此处一般写:click事件触发后的回调,来完成额外的功能
    	});
    </script>
    

四、Click事件触发效果图

  • 在这里插入图片描述

五、完整源代码及解析

  • <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Echarts事件与行为</title>
        <!-- 引入 echarts.js -->
        <script src="js/echarts.js"></script>
    </head>
    <body>
        <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
        <div id="main" style="width: 600px;height:400px;"></div>
        <script type="text/javascript">
            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('main'));
    
            // 准备图表展示数据
            var data_name = ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
            var data_num = [5, 20, 36, 10, 10, 20]
    
            // 指定图表的配置项和数据
            var option = {
                title: {
                    text: 'ECharts事件与行为示例' // 图表标题
                },
                tooltip: {},
                legend: {
                    data:['销量']       // 图例
                },
                xAxis: {
                    data: data_name     // x轴数据
                },
                yAxis: {},              // y轴默认自动
                series: [{
                    // 柱状图
                    type: 'bar',
                    data: data_num,
                    // 显示标签数量
                    label: {
                        normal: {
                            show: true,
                            position: 'top'     // 显示位置
                        }
                    },
                    //配置样式
                    itemStyle: {
                        //通常情况下样式
                        normal:{
                            //每个柱子的颜色即为colorList数组里的每一项,如果柱子数目多于colorList的长度,则柱子颜色循环使用该数组
                            color: function (params){
                                var colorList = ['#8dc63f','#add8e6','#ffb6c1','#f37b1d','#A6A6D2','#F0E68C'];
                                return colorList[params.dataIndex];
                            }
                        },
                        //鼠标悬停时,显示强调效果
                        emphasis: {
                                shadowBlur: 10,
                                shadowOffsetX: 0,
                                shadowColor: 'rgba(0, 0, 0, 0.5)'
                        }
                    },
                }],
            };
    
            // 使用刚指定的配置项和数据显示图表。
            myChart.setOption(option);
            // 处理点击事件并且跳转到相应的搜索页面
            myChart.on('click', function(params){
                // 跳转百度搜素
                // window.open('https://www.baidu.com/s?wd=' + encodeURIComponent(params.name))
                // 跳转淘宝搜索
                window.open('https://s.taobao.com/search?q=' + encodeURIComponent(params.name))
            })
        </script>
    </body>
    </html>
    

六、附录 - 事件参数params

  • 所有的鼠标事件包含参数的 params,都是一个数据信息对象,我们一般可以在控制台输出看一看;
<script>
	......
	myChart.on('click', function(params){
            // 当鼠标点击事件触发时,在控制台输出params
            console.log(params);
        })
</script>
  • 格式如下:
{
    // 当前点击的图形元素所属的组件名称,
    // 其值如 'series'、'markLine'、'markPoint'、'timeLine' 等。
    componentType: string,
    // 系列类型。值可能为:'line'、'bar'、'pie' 等。当 componentType 为 'series' 时有意义。
    seriesType: string,
    // 系列在传入的 option.series 中的 index。当 componentType 为 'series' 时有意义。
    seriesIndex: number,
    // 系列名称。当 componentType 为 'series' 时有意义。
    seriesName: string,
    // 数据名,类目名
    name: string,
    // 数据在传入的 data 数组中的 index
    dataIndex: number,
    // 传入的原始数据项
    data: Object,
    // sankey、graph 等图表同时含有 nodeData 和 edgeData 两种 data,
    // dataType 的值会是 'node' 或者 'edge',表示当前点击在 node 还是 edge 上。
    // 其他大部分图表中只有一种 data,dataType 无意义。
    dataType: string,
    // 传入的数据值
    value: number|Array
    // 数据图形的颜色。当 componentType 为 'series' 时有意义。
    color: string
}
Echarts饼图的legend点击事件可以通过监听`legendSelectchanged`事件实现。在该事件的回调函数,我们可以执行一些自定义的业务代码。例如,在小程序,可以通过设置`selected`属性来重新选被点击的legend,并触发弹窗显示。下面是一个示例代码: ```javascript this.chartComponnet.on('legendSelectchanged', function (params) { // 重新选被点击的legend chart.setOption({ legend: { selected: { [params.name]: true } } }); // 执行其他的自定义业务代码,比如显示弹窗 self.setData({ showFood: true }); }); ``` 另外,对于Vue框架Echarts使用方式,可以通过以下方式来监听legend点击事件: ```javascript this.$khflChart.on('legendselectchanged', (params) => { // 处理legend被点击后的逻辑 }); ``` 总而言之,通过监听legend的`legendSelectchanged`事件,我们可以在点击legend时处理其他的业务逻辑。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [echarts 自定义legend点击事件,改写点击行为](https://blog.csdn.net/AlexZZ0823/article/details/123281574)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [echarts 饼图legend点击不置灰](https://blog.csdn.net/elia1208/article/details/127206282)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值