微信小程序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 13 Javascript
JavaScript 一道字符串分解的题目
Aug 03 Javascript
js中匿名函数的创建与调用方法分析
Dec 19 Javascript
JS根据生日算年龄的方法
May 05 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
Apr 16 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
Apr 25 Javascript
利用jsonp与代理服务器方案解决跨域问题
Sep 14 Javascript
浅谈ElementUI中switch回调函数change的参数问题
Aug 24 Javascript
video.js 一个页面同时播放多个视频的实例代码
Nov 27 Javascript
微信小程序实现随机验证码功能
Dec 20 Javascript
分享Angular http interceptors 拦截器使用(推荐)
Nov 10 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
Oct 13 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中的错误处理、异常处理机制分析
2012/05/07 PHP
PHP eval函数使用介绍
2013/12/08 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
javascript 简练的几个函数
2009/08/29 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
使用clipboard.js实现复制功能的示例代码
2017/10/16 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
基于vue.js的分页插件详解
2017/11/27 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
2020/10/14 Javascript
python求素数示例分享
2014/02/16 Python
python修改字典内key对应值的方法
2015/07/11 Python
python3中int(整型)的使用教程
2017/03/23 Python
python实现发送邮件功能
2017/07/22 Python
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
python常用排序算法的实现代码
2019/11/08 Python
最小二乘法及其python实现详解
2020/02/24 Python
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
学生会感恩节活动方案
2014/10/11 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
2016暑期社会实践新闻稿
2015/11/25 职场文书