zoukankan      html  css  js  c++  java
  • 微信小程序----map组件实现(高德地图API实现wx.chooseLocation(OBJECT))

    声明

    bug: 页面搜索返回的列表在真机测试是会出现不显示问题?
    造成原因:在小程序map组件的同一区域,map组件的视图层比普通的文本视图层要高,所以在真机会遮挡!
    解决办法:将该文本视图采用cover-view,放在map中。
    感谢: 感谢Lrj_estranged指出问题!

    效果图

    这里写图片描述

    实现原理

    通过高德地图的微信小程序开发API(getInputtips),实现关键词获取对应提示列表,同时返回location。

    WXML

    <view class="map-inputtips-input">
      <input bindinput="bindInput" placeholder="搜索" focus="true" />
    </view>
    
    <view class="map_container">
      <map class="map" latitude='{{latitude}}' longitude='{{longitude}}' markers='{{markers}}'>
        <cover-view class="map-search-list {{isShow ? '' : 'map-hide'}}">
          <cover-view bindtouchstart="bindSearch" wx:key="searchId" data-keywords="{{item.name}}" data-location="{{item.location}}" class="map-box" wx:for="{{tips}}">
            {{item.name}}
          </cover-view>
        </cover-view>
      </map>
    </view>

    WXSS

    .map-inputtips-input{
      height: 80rpx;
      line-height: 80rpx;
      width: 100%;
      box-sizing: border-box;
      font-size: 30rpx;
      padding: 0 10px;
      background-color: #fff;
      position: fixed;
      top: 0;
      left: 0;
      z-index: 1000;
      border-bottom:1px solid #c3c3c3;
    }
    .map-inputtips-input input{
      border: 1px solid #ddd;
      border-radius: 5px;
      height: 60rpx;
      line-height: 60rpx;
      width: 100%;
      box-sizing: border-box;
      padding: 0 5px;
      margin-top: 10rpx;
    }
    .map-box{
      margin: 0 10px;
      border-bottom:1px solid #c3c3c3;
      height: 80rpx;
      line-height: 80rpx;
    }
    .map-box:last-child{border: none;}
    .map-search-list{
      position: fixed;
      top: 80rpx;
      left: 0;
      width: 100%;
      z-index: 1000;
      background-color: #fff;
    }

    JS

    const app = getApp();
    const amap = app.data.amap;
    const key = app.data.key;
    
    Page({
      data: {
        isShow: false,
        tips: {},
        longitude: '',
        latitude: '',
        markers: []
      },
      onLoad() {
        var _this = this;
        wx.getLocation({
          success: function(res) {
            if (res && res.longitude){
              _this.setData({
                longitude: res.longitude,
                latitude: res.latitude,
                markers:[{
                  id:0,
                  longitude: res.longitude,
                  latitude: res.latitude,
                  iconPath: '../../src/images/ding.png',
                  32,
                  height:32
                }]
              })
            }
          }
        })
      },
      bindInput: function (e) {
        var _this = this;
        var keywords = e.detail.value;
        var myAmap = new amap.AMapWX({ key: key });
        myAmap.getInputtips({
          keywords: keywords,
          location: '',
          success: function (res) {
            if (res && res.tips) {
              _this.setData({
                isShow: true,
                tips: res.tips
              });
            }
          }
        })
      },
      bindSearch: function (e) {
        var keywords = e.target.dataset.keywords;
        var location = e.target.dataset.location.split(',');
    
        this.setData({
          isShow: false,
          longitude: location[0],
          latitude: location[1],
          markers: [{
            id: 0,
            longitude: location[0],
            latitude: location[1],
            iconPath: '../../src/images/ding.png',
             32,
            height: 32,
            anchor: { x: .5, y: 1 },
            label: {
              content: keywords,
              color: 'blue',
              fontSize: 12,
              borderRadius: 5,
              bgColor: '#fff',
              padding: 3,
              x: 0,
              y: -50,
              textAlign: 'center'
            }
          }]
        })
      }
    })

    总结

    1. 输入框事件获取关键字,通过关键字获取展示列表;
    2. 列表选择事件,获取对应的location,并通过map组件的 markers 属性标记该坐标。

    其他

    我的博客,欢迎交流!

    我的CSDN博客,欢迎交流!

    微信小程序专栏

    前端笔记专栏

    微信小程序实现部分高德地图功能的DEMO下载

    微信小程序实现MUI的部分效果的DEMO下载

    微信小程序实现MUI的GIT项目地址

    微信小程序实例列表

    前端笔记列表

    游戏列表

  • 相关阅读:
    C# 运用StreamReader类和StreamWriter类实现文件的读写操作
    C# 理解FileInfo类的Open()方法
    C# 运用FileInfo类创建、删除文件
    C# 创建子目录
    C# 目录下的文件操作
    C# 运用DirectoryInfo类和FileInfo类
    C# 文件操作概述
    LINUX介绍
    linux iso 下载地址
    ADO.NET梳理
  • 原文地址:https://www.cnblogs.com/linewman/p/9918460.html
Copyright © 2011-2022 走看看