微信小程序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 相关文章推荐
动态加载js的几种方法
Oct 23 Javascript
javascript之水平横向滚动歌词同步的应用
May 07 Javascript
Node.js实现简单聊天服务器
Jun 20 Javascript
Javascript核心读书有感之表达式和运算符
Feb 11 Javascript
jQuery往textarea中光标所在位置插入文本的方法
Jun 26 Javascript
window.location.reload 刷新使用分析(去对话框)
Nov 11 Javascript
原生javascript实现的ajax异步封装功能示例
Nov 03 Javascript
Javascript设计模式之装饰者模式详解篇
Jan 17 Javascript
layer实现关闭弹出层刷新父界面功能详解
Nov 15 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
Nov 26 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
Jun 10 Javascript
js实现微信聊天界面
Aug 09 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
在项目中寻找代码的坏命名
2012/07/14 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
2014/06/23 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
用vue写一个日历
2020/11/02 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
使用Python脚本将文字转换为图片的实例分享
2015/08/29 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
Python基础教程之异常详解
2019/01/10 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
Python selenium自动化测试模型图解
2020/04/15 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
幼儿园亲子活动方案
2014/01/29 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
销售经理岗位职责
2014/03/16 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书
html5表单的required属性使用
2021/07/07 HTML / CSS
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python