当前位置: 首页 > news >正文

echart版本^5.4.2,brush区域选择(框选),实现自定义按钮调取框选工具

  • 需求:写图表的时候想把框选工具和页面其他操作按钮放在一起统一样式,所以不能使用echart自带的按钮来实现了,需要通过点击自己写的按钮来实现,框选图表区域后,获取当前区域x轴时间范围,然后把这个时间范围当作入参调取后端接口获取这个时间段的数据渲染到图表上

  • 核心:看开发文档,发现echart的brush的自己的工具也是通过调取takeGlobalCursor方法来实现开启或者关闭框选状态的

  • 逻辑:点击自己写的按钮开启框选状态,再给echart增加个监听brushSelected事件的函数,来监听框选状态的变化,从而计算出x轴此时的时间范围获取入参的值

  • 代码环境:vue3、ts、echart^5.4.2

  • 图片
    在这里插入图片描述

  • 代码

    <div class="icon-w" @click="openBrush" ></div>
    <div class="z-echartbox" style="height:50vh;width:100%">
    			<div class="z-echart" style="height:50vh;width:100%" ref="online"></div>
    </div>
    
    // js
    import * as echarts from 'echarts';
    import { EChartsOption } from 'echarts';
    
    const online = ref();
    // 点击自写按钮,启动brush框选状态
    const openBrush = ()=>{
    	// console.log('开启手动框选')
    	selectStatus.value = true
    		global[name].dispatchAction({ // global[name] ==online.value,就是你创建的echart名字
    				type: 'takeGlobalCursor',
    				// 如果想变为“可刷选状态”,必须设置。不设置则会关闭“可刷选状态”。
    				key: 'brush',
    				brushOption: {
    					// 参见 brush 组件的 brushType。如果设置为 false 则关闭“可刷选状态”。
    					brushType: 'rect', // 关键,值要写对不然启动不了
    					// 参见 brush 组件的 brushMode。如果不设置,则取 brush 组件的 brushMode 设置。
    					// brushMode: 'multiple'
    				}
    			});
    	
    }
    
    
    // 初始化表格,在初始化的时候监听表格缩放函数
    const initPieChart = (target,option,name)=>{ // ref值 ;表格的option设置值;自己起的表格别名其实等于global[name] 
    	global[name] = <any>echarts.init(target.value, charts.theme);
    	(<any>global[name]).setOption(option);
    
    // 监听缩放
    	global[name].on('brushSelected', (params) => { // global[name]===online.value,用这个替代也行
    		const brushComponent = params.batch[0];
            if (brushComponent?.areas?.length) {
    			// console.log('开始框选')
    			const [startIndex, endIndex] = brushComponent.areas[0].coordRange;
    			// console.log('echartData.value',echartData.value)
    			// console.log('echartData.value[Math.floor(startIndex)]',(echartData.value)[Math.floor(startIndex)])
    	// 将索引转换为 xAxis.data 中的分类值
    				// 这里需要注意,框选的返回的params额属性超级多复杂,找到自己需要的比如我查看属性发现只需要使用brushComponent.areas[0].coordRange的startIndex值就行了不需要endIndex
    			const startTime = echartData.value[Math.floor(startIndex[0])]; //
    			const endTime = echartData.value[Math.floor(startIndex[1])];
            // 发送后端请求 
             	searchObj.value.begin = startTime // 页面的时间选择器值,也需要同步显示框选的时间范围
    			searchObj.value.end = endTime// 页面的时间选择器值,也需要同步显示框选的时间范围
    			onSearch()
    		
            }
    	});
    
    
    }
    
    
    // 切换页面后删除监听事件,不要在意我使用的组件周期,我是使用了keep缓存组件所以通过这个周期来清空操作
    onDeactivated (()=> {
    	
    	if (global[name]) {
    
            global[name].dispose();
            global[name].off('brushSelected'); // 移除事件监听
          }
    
    })
    
    //	一些图标设置
    		option = {
    
    			 brush: {
    			          xAxisIndex: 0, // 绑定到第一个x轴
    			          brushType: 'rect', // 矩形框选
    			          throttleType: 'debounce',
    			          throttleDelay: 300,
    			          tooltip: false
    			        },
    			 toolbox: {
    			          feature: {
    			            brush: { type: ['rect'] ,show: false,},  // 不显示图标按钮
    						
    			          },
    					  left:'center',
    					  top:'2%',
    					//   height:'40px',
    					  
    			        },
    			
    			}
    		
    

相关文章:

  • 【第三天】零基础学习量化基础代码分析-持续更新
  • 基于Python和Django框架的食堂外卖系统设计与开发~源码
  • 论文阅读笔记:Deep Face Recognition: A Survey
  • 面试八股文--并发编程篇
  • skytower靶机详细教学
  • 第9章:LangChain结构化输出-示例5(基于大模型如何精确匹配POJO的字段)
  • Spring Security功能概述和相关介绍
  • IP------PPP协议
  • 利用 Vue 3 + Vite + Element UI Plus 结合 Service Worker 实现版本管理
  • pandas读取数据
  • 高并发微服务日志管理:ELK、Loki、Fluentd 终极对决与实战指南
  • 矩阵的 正定(Positive Definite)与负定(Negative Definite):从Fisher信息矩阵看“曲率”的秘密
  • Java所有运算符理解
  • SOME/IP-SD -- 协议英文原文讲解5
  • 线代[8]|北大丘维声教授《怎样学习线性代数?》(红色字体为博主本人注释)
  • Chrome 浏览器(版本号49之后)‌解决跨域问题
  • Hi3516CV610开发板ISP调试之——图像ISP在线调试 环境搭建教程
  • 《白帽子讲Web安全》学习:深入解析Cookie与会话安全
  • 银河麒麟高级服务器操作系统在线调整/pro/{PID}/limits文件中nofile的软限制和硬限制参数值操作方法
  • 设计模式-结构性模式
  • 新修订的《餐饮业促进和经营管理办法》公布,商务部解读
  • 特朗普公开“怼”库克:苹果不应在印度生产手机
  • 银行积分大幅贬值遭质疑,涉及工行、中行、农行等
  • 昆明公布3起经济犯罪案例:一人持有820余万假美元被判刑十年
  • 病重老人被要求亲自取钱在农业银行门口去世?株洲警方介入
  • 经常口干口渴的人,要当心这些病