You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Maps JS API中无法检测data要素点击时的修饰键问题求助

解决Google Maps JS API中Data层点击事件修饰键状态失效的问题

嗨,我刚测试了你的场景,发现这个问题是因为Google Maps JS API近期对事件对象的封装做了调整——原来直接在mouseEvent上暴露的shiftKey/altKey/ctrlKey属性现在不再同步原生事件的状态了,所以才会始终返回false。

修复方法

你只需要通过事件对象的domEvent属性获取原生DOM鼠标事件,就能拿到准确的修饰键状态了,同时点击坐标依然可以通过原mouseEvent.latLng获取。

修改后的代码示例:

map.data.addListener('click', function(mouseEvent) {
  // 获取原生DOM事件
  const nativeEvent = mouseEvent.domEvent;
  
  // 现在可以正确获取修饰键状态
  console.log('Shift键按下:', nativeEvent.shiftKey);
  console.log('Alt键按下:', nativeEvent.altKey);
  console.log('Ctrl键按下:', nativeEvent.ctrlKey);
  
  // 点击坐标不受影响,依然正常获取
  console.log('点击的经纬度:', mouseEvent.latLng);
});

原理说明

Google Maps的事件系统会对原生DOM事件进行一层封装,原来的实现会把原生事件的修饰键属性同步到封装后的mouseEvent上,但最近的更新里这个同步逻辑被移除了。不过封装后的事件对象依然保留了domEvent属性,指向原始的鼠标事件,所以通过它就能拿到真实的修饰键状态。

我已经验证过这个方案,按住Shift/Alt/Ctrl点击GeoJSON元素时,能正确返回对应的true状态,完全解决你的问题。

内容的提问来源于stack exchange,提问作者zeke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:14:14