小程序的定位问题

2019-03-09  本文已影响0人  CRJ997

小程序首次进入时定位到北京的问题:
写小程序时发现,在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

上一篇 下一篇

猜你喜欢

热点阅读