一、需求(外卖选择收货地址)
使用小程序的picker组件选择省市区,然后根据选择的省市区获的经纬度来设置map的中心点, 类似于滴滴的选择方式。
二、实现
首先引入map组件
<map
id="map"
scale="14"
:latitude='!init&&latitude'
:longitude= '!init&&longitude'
@regionchange="handleRegionChange"
@end="handleRegionChange"
show-location
:style="'width: 100%; height:'+height+'px'"
>
坑一、@regionchange不会触发, 只会触发@end @begin, 后者不需要所以没有监听。
坑二、不难看出经纬度的设置多了个参数限制。这是为了解决另一个坑,当用户移动地图之后,重新获取地图中心并设置经纬度,会闪、会闪、会闪。。。重要的bug说三遍,有时甚至会回到原处。
解决方案、首先map不设置lat,lng能解决切换位置闪的问题,但是就不能初始化地图的中心。所以多设置了一个init参数。初始值为false,然后是handleRegionChange的处理代码
handleRegionChange (e) {
this.init = true
if (e.type === 'end') {
this.setCenter()
}
}
用户移动之后init设置为true,地图中心交map组件自己控制。则不会闪。。。