Blogger Information
Blog 17
fans 0
comment 0
visits 23108
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
微信小程序地图使用用户头像标记
飞鸿先森的博客
Original
3238 people have browsed it

一、在开发微信小程序地图的过程中,有这样一个需求,用户发表祝福语,然后存入数据库,可以在地图上显示用户头像并且点击用户头像时显示祝福语。

二、自己在开发时遇到的问题:

1.微信头像是网络图片,而地图的markers中的iconPath只能使用本地图片

2.将网络图片缓存到本地,但是因为小程序的异步执行导致图片不能显示

三、解决办法:

1.解决微信头像是网络图片的问题,可以使用wx.downloadFile({})方法来将头像缓存到本地,然后再将本地路径赋给iconPath即可,第一个不能使用网络图片的问题解决。

2.异步请求导致本地缓存的图片不能在地图上显示,我的解决办法是,先通过request请求获取到祝福语后,用for循环赋值给markers,iconPath路径填写一个本地路径,同时调用一个方法,获取当前用户头像的本地缓存路径,获取成功后赋值给markers中每个对象的iconPath,所以一般来说,地图上的图片会有切换,首先显示的是本地的统一的图片,经过一段时间的请求后,图片一个个变为用户头像。

四、相关操作代码

getBlessing: function(){
    var that = this;
    var getUserPic = function (pic_url,i) {
      let cachePath;
      if(pic_url==null || pic_url=='') return;
      wx.downloadFile({
        url: pic_url,
        success: (pathInfo) => {
          // pathInfo.path 这是下载成的缓存链接,模拟器marker有时不支持http开头,真机不影响,得去掉http:/
          cachePath = pathInfo.tempFilePath.replace("http:/", '').replace("https:/", '')//真机中无需replace,都支持,
          var mak = "markers[" + i +"].iconPath";
          that.setData({
            [mak]: cachePath
          })
        }
      })
      
    }
  
    wx.request({
      url: getApp().globalData.host + 'Blessing/getBlessingList',
      method: 'POST',
      success: function (res) {
        var list = res.data.list;
        var tempArr = [];
        var includeArr = [];
        var item = {};
        var includeItem = {};
        for (var i = 0; i < list.length; i++) {
          var pic = getUserPic(list[i].user.user_pic,i);
          item = {
            iconPath: '/images/icon/small-logo.png',
            id: list[i].id,
            latitude: list[i].latitude,
            longitude: list[i].longitude,
            width: 30,
            height: 30,
            alpha: 0.8,
            callout: {
              content: list[i].content,//字数限制在20以内
              color: '#FFFFFF',
              fontSize: 10,
              borderRadius: 10,
              bgColor: '#F44336',
              padding: 5,
              display: 'BYCLICK',//'BYCLICK':点击显示; 'ALWAYS':常显
            }
          }

          includeItem = {
            latitude: list[i].latitude,
            longitude: list[i].longitude,
          }
          tempArr.push(item);
          includeArr.push(includeItem);
        }
        that.setData({
          markers: tempArr,
          includepoints: includeArr,
          count: res.data.count
        })
        console.log(that.data.markers)
      }
    })
  },

五、效果截图

20180713001015108.png

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post