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
}
发布了162 篇原创文章 · 获赞 490 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/PY0312/article/details/104508416
今日推荐