分享

小程序标记点切换闪屏问题的解决方法

 算法与编程之美 2021-12-01

引言

解决小程序地图切换标记点闪屏问题,提升用户体验。

问题

如何解决小程序地图切换标记点闪屏问题。

方法

解决思路:给顶部选项卡设置id并给其绑定相关标记点的信息,通过识别选项卡id实现切换不同标记点。

index.wxml

<!-- 主页面,地图页面 -->
<view style="width: 100%;">
 <cover-view class="navbar" >
   <cover-view wx:for="{{buildlData}}" wx:key="id" id="{{index}}">
     <!-- style    的作用是用来进行点击变色的 -->
     <!-- data-num 的作用是在'changePage'中传递过去的参数num -->
     <view style="color:{{item.fId==currentItemId?'#FFCC00':'#000'}}" data-num="{{item.fId}}" class="box "
       bindtap="changePage" >
       <cover-view >{{item.name}}</cover-view>
     </view>
   </cover-view>
</cover-view>
 <map
 bindtap="close"
 longitude="{{longitude}}"
 latitude="{{latitude}}"
 style="width: 100%; height: 1414.5px;"
 scale="{{buildlData[isSelectedBuildType].scale}}"
 markers="{{buildlData[isSelectedBuildType].data}}"
 bindmarkertap="markertap"
 label="{{buildlData[isSelectedBuildType].name}}"
 id="map"
 data-num="{{buildlData[isSelectedBuildType].data}}">
 </map>
</view>

index.js

//index.js
//获取应用实例
const app = getApp()
var map= [
 {
   "fId":"1",
   "name": "科普点",
   "scale": 16,
   "latitude": "39.935755",  
   "longitude": "116.336711",
   "iconPath":"",
   "data": [
     {
       "name": "狮虎山",
       id: 0,
       "latitude": "39.94158",
       "longitude": "116.340182",
       "iconPath": "",
       "width": "30",
       "height": "35",
       label:{
         content:'狮虎山',//气泡内显示的内容
         fontsize:15,//文字大小
         borderRadius:10,//边框圆角
         bgColor:'#fff',//气泡背景颜色
         anchorX:-25,//气泡的二维坐标
         anchorY:3,
         padding:5,//文本边缘留白
       },
       "img": [
         "/img/动物园.png",
         "/img/厕所.png"
       ],
       "description": "这里是狮虎山"
     },
     {
       "name": "火烈鸟馆",
       id: 1,
       "latitude": "39.940578",
       "longitude": "116.335972",
       "iconPath": "/img/动物园.png",
       "width": "30",
       "height": "35",
       label:{
         content:'火烈鸟馆',
         fontsize:15,
         borderRadius:10,
         bgColor:'#fff',
         anchorX:-25,
         anchorY:3,
         padding:5,
       },
     },
     {
       "name": "鹦鹉馆",
       id: 2,
       "latitude": "39.941588",
       "longitude": "116.335554",
       "iconPath": "/img/动物园.png",
       "width": "30",
       "height": "35",
       label:{
         content:'鹦鹉馆',
         fontsize:15,
         borderRadius:10,
         bgColor:'#fff',
         anchorX:-25,
         anchorY:3,
         padding:5,
       },
     },
   ]
 },
 {
   "fId":"2",
   "name": "动物场馆",
   "scale": 16.4,
   "latitude": "39.937419",  
   "longitude": "116.336612",
   "iconPath":"",
   "data": [
     {
       "name": "貘科动物馆馆",
       id: 0,
       "latitude": "39.941386",
       "longitude": "116.336655",
       "iconPath": "/img/数据折转房子.png",
       "width": "30",
       "height": "35",
       label:{
         content:'貘科动物馆',
         fontsize:15,
         borderRadius:10,
         bgColor:'#fff',
         anchorX:-35,
         anchorY:3,
         padding:5,
       }
     },
     {
       "name": "澳洲动物区",
       id: 1,
       "latitude": "39.94234",
       "longitude": "116.338558",
       "iconPath": "/img/数据折转房子.png",
       "width": "30",
       "height": "35",
       label:{
         content:'澳洲动物区',
         fontsize:15,
         borderRadius:10,
         bgColor:'#fff',
         anchorX:-35,
         anchorY:3,
         padding:5,
       }
     },
     {
       "name": "水禽湖",
       id: 2,
       "latitude": "39.939922",
       "longitude": "116.336749",
       "iconPath": "/img/数据折转房子.png",
       "width": "30",
       "height": "35",
       label:{
         content:'水禽湖',
         fontsize:15,
         borderRadius:10,
         bgColor:'#fff',
         anchorX:-35,
         anchorY:3,
         padding:5,
       }
     },
   ]
 },
 {
   "fId":"3",
   "scale": 15.9,
   "name": "游览点",
   "latitude": "39.937419",  
   "longitude": "116.336612",
   "iconPath":"/img/bj.png",
   "data": [
     {
       "name": "休闲广场",
       id: 0,
       "latitude": "39.942343",
       "longitude": "116.33601",
       "iconPath": "/img/公园游乐场.png",
       "width": "30",
       "height": "35",
       label:{
         content:'休闲广场',
         fontsize:15,
         borderRadius:10,
         bgColor:'#fff',
         anchorX:-35,
         anchorY:3,
         padding:5,
       }
     },
     {
       "name": "依绿亭",
       id: 1,
       "latitude": "39.941373",
       "longitude": "116.339201",
       "iconPath": "/img/公园游乐场.png",
       "width": "30",
       "height": "35",
       label:{
         content:'依绿亭',
         fontsize:15,
         borderRadius:10,
         bgColor:'#fff',
         anchorX:-35,
         anchorY:3,
         padding:5,
       }
     },
     {
       "name": "陆谟克堂",
       id: 2,
       "latitude": "39.939767",
       "longitude": "116.335898",
       "iconPath": "/img/公园游乐场.png",
       "width": "30",
       "height": "35",
       label:{
         content:'陆谟克堂',
         fontsize:15,
         borderRadius:10,
         bgColor:'#fff',
         anchorX:-35,
         anchorY:3,
         padding:5,
       }
     },
   ]
 },
 {
   "fId":"4",
   "name": "卫生间",
   "scale": 15.3,
   "latitude": "39.937419",  
   "longitude": "116.336612",
   "iconPath":"/img/bj.png",
   "data": [
     {
       "name": "卫生间1",
       id: 0,
       "latitude": "39.940565",
       "longitude": "116.335611",
       "iconPath": "/img/厕所.png",
       "width": "30",
       "height": "35",
     },
     {
       "name": "卫生间2",
       id: 1,
       "latitude": "39.944379",
       "longitude": "116.338024",
       "iconPath": "/img/厕所.png",
       "width": "30",
       "height": "35",
     },
     {
       "name": "卫生间3",
       id: 2,
       "latitude": "39.941432",
       "longitude": "116.331798",
       "iconPath": "/img/厕所.png",
       "width": "30",
       "height": "35",
     },
   ]
 },
]
Page({
 data: {
   takeSession: false,
   latitude: 39.937419, //默认定位纬度
   longitude: 116.336612,  //默认定位经度
   scale:15.4,
   buildlData: map,
   isSelectedBuildType: 0,
   currentItemId:"1",
 },
//展示标志点
 changePage: function (event) {
   this.setData({
     currentItemId:event.currentTarget.dataset.num,
     isSelectedBuildType: event.currentTarget.dataset.num-1,
     longitude:map[event.currentTarget.dataset.num-1].longitude,
     latitude:map[event.currentTarget.dataset.num-1].latitude,
     scale: 18,
   });
 },
})

index.wxss

/* pages/map.wxss */
page{
 display: flex;
 flex-direction: column;
 height: 100%;
}
.navbar{
 flex:none;
 display:flex;
 background: rgb(255, 255, 255);
}
.box {
 display: inline;
 text-align:center;
 font-weight: 500;
 font-size: 15px;
 margin: 10em;
 background-color: #ffffff;
}

实验结果与讨论

上述方法可解决小程序地图切换标记点闪屏问题,并实现切换不同标记点时地图的缩小放大。

稿DLETA

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约