微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例


Posted in Javascript onJanuary 23, 2019

本文实例讲述了微信小程序map组件结合高德地图API实现wx.chooseLocation功能。分享给大家供大家参考,具体如下:

声明

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

效果图

微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例

实现原理

通过高德地图的微信小程序开发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',
    width: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',
  width: 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 属性标记该坐标。

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
判断控件是否已加载完成的代码
Feb 24 Javascript
jQuery EasyUI API 中文文档 - Spinner微调器使用
Oct 21 Javascript
jQuery each函数源码分析
May 25 Javascript
js友好的时间返回函数
Aug 24 Javascript
浅谈javascript中执行环境(作用域)与作用域链
Dec 08 Javascript
JavaScript html5 canvas实现图片上画超链接
Oct 20 Javascript
微信小程序实现聊天对话(文本、图片)功能
Jul 06 Javascript
微信小程序动态生成二维码的实现代码
Jul 25 Javascript
详解es6超好用的语法糖Decorator
Aug 01 Javascript
vsCode安装使用教程和插件安装方法
Aug 24 Javascript
微信小程序中的上拉、下拉菜单功能
Mar 13 Javascript
JS数组方法some、every和find的使用详情
Oct 05 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
Jan 23 #Javascript
使用javascript做时间倒数读秒功能的实例
Jan 23 #Javascript
大转盘抽奖小程序版 转盘抽奖网页版
Apr 16 #Javascript
javascript json字符串到json对象转义问题
Jan 22 #Javascript
使用JavaScript保存文本文件到本地的两种方法
Jan 22 #Javascript
微信小程序实现九宫格抽奖
Apr 15 #Javascript
200行HTML+JavaScript实现年会抽奖程序
Jan 22 #Javascript
You might like
php Smarty初体验二 获取配置信息
2011/08/08 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
提高网站信任度的技巧
2008/10/17 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
JavaScript中的console.profile()函数详细介绍
2014/12/29 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
js实现拖拽功能
2017/03/01 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
Mac下安装vue
2018/04/11 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
Python进程间通信Queue实例解析
2018/01/25 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
Python PO设计模式的具体使用
2019/08/16 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
python爬虫容易学吗
2020/06/02 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
python3中for循环踩过的坑记录
2020/12/14 Python
一分钟演讲稿
2014/04/30 职场文书
辞职信的写法
2015/02/27 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python