ECharts点击事件自定义参数

本文介绍如何在ECharts中通过点击事件传递自定义参数,并展示如何读取这些参数的具体方法。通过示例代码,详细解释了如何设置并获取自定义参数。

实际开发中可能需要传自定义参数到点击事件,通过params.data(传入的原始数据项)实现自定义参数(console打印结果)

效果图:


源码:(注意红色部分)

<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8" />
		<title>echartsDemo</title>
		<script type="text/javascript" src="js/echarts/echarts.min.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'));
			//点击事件
			myChart.on('click', function(param) {
				console.log(param);
				console.log(param.data.name);
				console.log(param.data.value);
				console.log(param.data.userDefined);
			});
			// 指定图表的配置项和数据
			var option = {
				title: {
					text: 'ECharts 入门示例'
				},
				tooltip: {},
				legend: {
					data: ['销量']
				},
				xAxis: {
					data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
				},
				yAxis: {},
				series: [{
					name: '销量',
					type: 'bar',
					data: [{
						name: "名称",
						value: 5,
						userDefined: "test123456"
					}, 20, 36, 10, 10, 20]
				}]
			};
			// 使用刚指定的配置项和数据显示图表。
			myChart.setOption(option);
		</script>
	</body>

</html>

ECharts所有的鼠标事件包含参数 params,这是一个包含点击图形的数据信息的对象,如下格式:

{
    // 当前点击的图形元素所属的组件名称,
    // 其值如 '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 中实现自定义图例点击事件ECharts 中,可以通过监听 `legendselectchanged` 或者更通用的 `click` 事件来捕获用户的交互行为并执行特定逻辑。以下是具体实现方式: #### 使用 `legendselectchanged` 事件 当用户点击图例时,会触发 `legendselectchanged` 事件。可以利用此事件来自定义处理逻辑。 ```javascript Chart.on('legendselectchanged', function(params) { const selected = params.selected; // 更新选项中的 legend 配置项 options.value.legend.selected = Object.keys(selected).reduce((acc, key) => { acc[key] = selected[key]; // 根据选中状态更新配置 return acc; }, {}); Chart.setOption(options.value, true); // 刷新图表显示 }); ``` 这段代码展示了如何动态调整图例的选择状态,并实时刷新图表[^1]。 --- #### 使用 `click` 事件 如果需要更加灵活地控制图例的行为,则可以直接绑定 `click` 事件到整个图表上,并判断点击的目标是否为图例区域。 ```javascript Chart.on('click', function(event) { if (event.componentType === 'legend') { // 确认点击的是图例组件 console.log('Legend clicked:', event.name); // 手动修改 legend 的 selected 属性 options.value.legend.selected[event.name] = !options.value.legend.selected[event.name]; Chart.setOption(options.value, true); // 应用更改后的配置 } }); ``` 这种方式允许开发者完全掌控图例点击的具体响应机制,而不仅仅局限于默认的切换功能[^2]。 --- #### 动态设置 Legend 的 Selected 属性 无论是哪种方法,在实际开发过程中都需要操作 `options.value.legend.selected` 对象以反映当前的状态变化。例如: ```javascript // 初始化时设定某些系列不可见 options.value = { legend: { data: ['x轴', 'y轴', 'z轴'], selected: { x轴: true, y轴: false, z轴: true } }, series: [ { name: 'x轴', type: 'line', data: [...] }, { name: 'y轴', type: 'bar', data: [...], silent: true }, // 设置 silent=true 可隐藏交互效果 { name: 'z轴', type: 'scatter', data: [...] } ] }; ``` 通过预先指定 `selected` 字段的内容,能够决定哪些序列初始状态下可见或被禁用[^3]。 --- #### 完整示例代码 下面提供了一个完整的例子用于演示上述技术要点: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ECharts Custom Legend Event</title> <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> </head> <body> <div id="main" style="width: 600px;height:400px;"></div> <script type="text/javascript"> var chartDom = document.getElementById('main'); var myChart = echarts.init(chartDom); var option = { title: { text: 'Custom Legend Click' }, tooltip: {}, legend: { data: ['x轴', 'y轴', 'z轴'], selected: { x轴: true, y轴: false, z轴: true } }, xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed'] }, yAxis: { type: 'value' }, series: [{ name: 'x轴', data: [120, 200, 150], type: 'line' }, { name: 'y轴', data: [70, 90, 100], type: 'bar', silent: true }, { name: 'z轴', data: [100, 130, 110], type: 'scatter' }] }; myChart.setOption(option); // 绑定 legendselectchanged 事件 myChart.on('legendselectchanged', function(params) { var newSelectedState = {}; for (let key in params.selected) { newSelectedState[key] = params.selected[key]; } option.legend.selected = newSelectedState; myChart.setOption(option, true); }); // 绑定 click 事件作为补充方案 myChart.on('click', function(event) { if (event.componentType === 'legend') { let currentStatus = !!option.legend.selected[event.name]; option.legend.selected[event.name] = !currentStatus; myChart.setOption(option, true); } }); </script> </body> </html> ``` 以上代码片段实现了两种不同的图例点击事件处理策略,并结合了初始化阶段对 `selected` 参数的手动赋值[^4]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值