微信小程序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 相关文章推荐
javascript 学习笔记(onchange等)
Nov 14 Javascript
js单词形式的运算符
May 06 Javascript
JavaScript实现图片轮播的方法
Jul 31 Javascript
jQuery中hover与mouseover和mouseout的区别分析
Dec 24 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
May 04 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
Feb 07 Javascript
微信小程序获取用户openId的实现方法
May 23 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
Aug 08 jQuery
layui 设置table 行的高度方法
Aug 17 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
Nov 05 Javascript
Vuex的各个模块封装的实现
Jun 05 Javascript
vue组件vue-esign实现电子签名
Apr 21 Vue.js
微信小程序使用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的urlencode()URL编码函数浅析
2011/08/09 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
javascript定时器完整实例
2015/02/10 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
解决vue请求接口第一次成功,第二次失败问题
2020/09/08 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
python 文件操作api(文件操作函数)
2016/08/28 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
Python中反射和描述器总结
2018/09/23 Python
python yield关键词案例测试
2019/10/15 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
2020/10/27 Python
Python远程linux执行命令实现
2020/11/11 Python
英国著名的药妆网站:Escentual
2016/07/29 全球购物
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
工程管理造价应届生求职信
2013/11/13 职场文书
员工晚婚的请假条
2014/02/08 职场文书
学生社团文化节开幕式主持词
2014/03/28 职场文书
亲属关系公证书
2014/04/08 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
小学运动会开幕词
2015/01/28 职场文书
2015年语言文字工作总结
2015/07/23 职场文书