小程序首次进入时定位到北京的问题:
写小程序时发现,在onready函数中就算使用了moveToLocation函数,但是还是出现没有定位的情况,因此看了一下,貌似是因为onready函数不保证节点一定会渲染完成的问题。所以就试了一下下面的方法:
使用setInterval函数进行小程序内部dom节点的轮询,代码如下:
let that=this;
let timer = setInterval(function (){
console.log("正在检测");
let test = query.select("#mainContainer").boundingClientRect(function(rect){
if(rect!==null){
console.log("检测到已经渲染完成");
that.data.mapCtx = wx.createMapContext('mapView')
that.data.mapCtx.moveToLocation();
that.setData({
scale: 17
});
clearInterval(timer);
}
}).exec();
},200);
这样子当检测到dom节点渲染完成的时候,就可以进行定位了。
但是有个问题:
小程序在已经定位到当前位置的情况下,短时间内重新使用moveToLocation函数,会出现离开当前位置,到map组件默认的开始位置的情况。而setInterval由于是定时的在处理队列中加入处理函数,所以会触发多次调用moveToLocation函数。
附带一个参考链接:setinterval函数和setTimeout函数详解
导致最终定位结果还是在北京,觉得很尴尬....如果在onload函数中进行设置,又稍微有点延迟。
后来发现还是getLocation这个接口比较好用,直接通过这个接口的回调值的latitude和longitude值设置map组件的longitude和latitude值,就可以进行定位了,不过Map组件需要设置show-location属性为true
网友评论