微信小程序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实现的网站首页随机公告随机公告
Mar 14 Javascript
ext 列表页面关于多行查询的办法
Mar 25 Javascript
javascript作用域容易记错的两个地方分析
Jun 22 Javascript
使用js画图之饼图
Jan 12 Javascript
JavaScript实现梯形乘法表的方法
Apr 25 Javascript
Web打印解决方案之普通报表打印功能
Aug 29 Javascript
AngularJS ng-style中使用filter
Sep 21 Javascript
概述一个页面从输入URL到页面加载完的过程
Dec 16 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
Mar 21 jQuery
jQuery中.attr()和.data()的区别分析
Sep 03 jQuery
简单了解JS打开url的方法
Feb 21 Javascript
微前端qiankun改造日渐庞大的项目教程
Jun 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
php循环输出数据库内容的代码
2008/05/24 PHP
PHP批量检测并去除文件BOM头代码实例
2014/05/08 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
可输入的下拉框
2006/06/19 Javascript
JS类的封装及实现代码
2009/12/02 Javascript
offsetParent 算法分析
2010/04/05 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
JavaScript中localStorage对象存储方式实例分析
2017/01/12 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
Under Armour安德玛德国官网:美国高端运动科技品牌
2019/03/09 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
运动会稿件300字
2014/02/14 职场文书
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
2014两会学习心得:榜样精神伴我行
2014/03/17 职场文书
规范化管理年活动总结
2014/08/29 职场文书
2015年科室工作总结
2015/04/10 职场文书
刘胡兰观后感
2015/06/16 职场文书
2015中秋祝酒词
2015/08/12 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python
Golang数据类型和相互转换
2022/04/12 Golang