问题描述:当鼠标移入到指定区块时右下角显示该区域详细信息,滑出或划入到空白区域时隐藏右下角的弹出框。使用mouseout只能实现当从区块A移动到区划B时才会触发该方法,无法实现。

解决方案:使用chartInstance.getZr().on(‘mousemove’, (e : any) => {})实现是否处于空白区域
const chart3d = ref<HTMLElement | null>(null);
let chartInstance: echarts.ECharts | null = null;
const iniEcharts = () => {
if (!chart3d.value) return;
// 先销毁示例
if (chartInstance) {
chartInstance.dispose();
chartInstance = null;
}
chartInstance = echarts.init(chart3d.value);
// 注册地图
echarts.registerMap('Shaanxi', shaanxiGeoJSON as any);
const option = {}
chartInstance.setOption(option);
chartInstance.on('mouseover', function (params: any) {
// 划入到区块上时线上右下角弹出框
showRightSide(params.data);
});
let debounceTimer: any = null;
let lastEvent: any = null; // 保存最后的事件
chartInstance.getZr().on('mousemove', (e : any) => {
lastEvent = e; // 保存最新的事件
if (debounceTimer) {
clearTimeout(debounceTimer);
}
debounceTimer = setTimeout(() => {
if (lastEvent.target == undefined) {
console.log('空白区域,隐藏右下角弹框');
hideRightSide();
} else {
console.log('非空白区域');
}
}, 100);
});
chartInstance.on('globalout', function (params: any) {
const toElement = params.event.event.toElement;
if(toElement){
// 鼠标移出该地图区域,不包括右下角弹框元素
const hasMapRightSideClass = toElement.classList && toElement.classList.contains('map-right-side');
if(!hasMapRightSideClass){
hideRightSide();
}
}
});
}
...

3469

被折叠的 条评论
为什么被折叠?



