微信小程序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 相关文章推荐
利用onresize使得div可以随着屏幕大小而自适应的代码
Jan 15 Javascript
JQuery autocomplete 使用手册
Apr 01 Javascript
一些常用的JavaScript函数(json)附详细说明
May 25 Javascript
js局部刷新页面时间具体实现
Jul 04 Javascript
javascript实现的DES加密示例
Oct 30 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
Jan 15 Javascript
Node.js中对通用模块的封装方法
Jun 06 Javascript
jquery获取及设置outerhtml的方法
Mar 09 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
Feb 05 Javascript
基于Node.js实现压缩和解压缩的方法
Feb 13 Javascript
JavaScript实现预览本地上传图片功能完整示例
Mar 08 Javascript
Vue路由前后端设计总结
Aug 06 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分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
PHP多维数组指定多字段排序的示例代码
2018/05/16 PHP
JS 时间显示效果代码
2009/08/23 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
javascript 判断当前浏览器版本并判断ie版本
2017/02/17 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
2020/07/31 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
python+Django+apache的配置方法详解
2016/06/01 Python
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
Python反射用法实例简析
2017/12/22 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
2018/04/10 Python
python调试神器PySnooper的使用
2019/07/03 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
广州某公司软件工程师面试题
2014/12/22 面试题
运动会解说词100字
2014/01/31 职场文书
采购部经理岗位职责
2014/02/10 职场文书
公司委托书格式范本
2014/09/16 职场文书
组织生活会发言材料
2014/12/15 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏