微信小程序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 相关文章推荐
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
Mar 31 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
Feb 05 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
Apr 11 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
Jan 31 Javascript
JavaScript表单验证实例之验证表单项是否为空
Jan 10 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
May 16 Javascript
js中常用的Math方法总结
Jan 12 Javascript
基于JavaScript中标识符的命名规则介绍
Jan 06 Javascript
原生JavaScript实现todolist功能
Mar 02 Javascript
JS实现网站吸顶条
Jan 08 Javascript
Javascript执行流程细节原理解析
May 14 Javascript
JS实现图片幻灯片效果代码实例
May 21 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
加强版phplib的DB类
2008/03/31 PHP
php+ajax实现无刷新动态加载数据技术
2015/04/28 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
判断是否安装flash player及当前版本的JS代码
2013/08/08 Javascript
button没写type=button会导致点击时提交
2014/03/06 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
vue路由跳转传参数的方法
2019/05/06 Javascript
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
javascript实现固定侧边栏
2021/02/09 Javascript
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
Django开发中的日志输出的方法
2018/07/02 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
python with (as)语句实例详解
2020/02/04 Python
Python新手学习标准库模块命名
2020/05/29 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
Python库安装速度过慢解决方案
2020/07/14 Python
农田水利实习自我鉴定
2013/09/19 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
python开发实时可视化仪表盘的示例
2021/05/07 Python