背景: 在高德地图上渲染了很多marker, 点击marker后加载infoWindow并对地图amap进行setZoom和setCenter将marker缩放至视图中心
出现问题: 当要点击marker不在视图中心时,点击marker后加载了infoWindow,但是此时setCenter却不能够正确的设置中心点,会出现偏移
复现步骤:
1.地图渲染marker
2.点击右上角边缘marker(此时获取了marker的position,并用此position进行setCenter,setZoom,预期应该将infoWindow打开,并且地图比例尺放大并将marker显示在中心位置)
3.实际效果出现偏差
问题分析:在出现问题之后一直很疑惑,为什么setCenter是正确的中心店的position,但是实际效果却并不一样,当我们不加载infoWindow时,就不会出现这个问题,那么一定是infoWindow出现了冲突,但是如果infoWindow出现的位置都在视图范围之内,又能够如预期效果一样定位到中心
结论: 最后在各种查阅,调试之后,发现了问题的所在处, infoWindow有个属性叫autoMove,此属性若为true,当我们的infoWindow在打开的时候,如果infoWindow的内容不在视图范围之内,会自动调整地图视图将infoWindow所有内容区域显示到范围内,所以我们如果marker在边缘,点击marker时,加载infoWindow,此时infoWindow的内容区域并不在地图视图范围之内,所以进行了autoMove调整视口,而这一操作恰好与我们的setCenter产生了冲突,导致最后的实际效果总是和预期有偏差,而infoWindow的autoMove属性默认值是true(在文档里并没有提到有默认true)
解决方案: 如果我们需要动态设置视图center,且会伴随infoWindow的开启和关闭,就将其autoMove属性配置为false,即可解决上述问题