AMap 地图点击事件无法触发,是哪里配置错了?
我在用高德地图 AMap 开发一个标记点功能,但给地图实例加了 click 事件监听后完全没反应。控制台也不报错,就是点地图任何地方都没触发。我确认已经引入了 AMap 的 JS API,并且地图正常显示出来了。
我试过用 map.on('click', handler) 这种写法,也检查过 map 实例是不是 undefined,都不是问题。是不是需要额外开启什么交互选项?
const map = new AMap.Map('container', {
zoom: 12,
center: [116.397428, 39.90923],
// 没有设置其他参数
});
map.on('click', (e) => {
console.log('clicked!', e);
});
你可以试着把事件绑定放到地图加载完成的回调里,这是最稳的写法。有时候地图实例虽然生成了,但底层的交互层还没渲染好,这时候绑定事件就会失效。
给你一段改好的代码,你可以直接试试:
除了代码,还有两个容易忽略的坑。
第一是 CSS 问题。你打开浏览器开发者工具,选中
#container看看它上面有没有盖着别的 div。如果有,那个 div 的 z-index 可能比地图高,或者它把点击事件挡住了。这时候要调整层级,或者给遮挡层加个pointer-events: none;。第二是安全配置。既然你用到了地图交互,肯定要把坐标传回后端存起来或者查数据。千万别直接把
e.lnglat拿来就用,一定要在前端做个基础的经纬度范围校验,防止有人伪造请求搞乱你的数据库。另外,记得去高德控制台把你的 Key 加上域名白名单,限制只能在你自己的域名下使用,不然 Key 被人扒走刷流量,那个扣费可是很肉疼的。你按上面的代码改一下,再检查一下 CSS 层级,基本就能解决。