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
相关产品推荐
相关产品推荐

