微信小程序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清除IE浏览器缓存的方法
Jul 26 Javascript
jquery append()方法与html()方法的区别及使用介绍
Aug 01 Javascript
基于jQuery实现的图片切换焦点图整理
Dec 07 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
Aug 21 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
Mar 01 Javascript
基于jquery编写分页插件
Mar 07 Javascript
AngularJS表单详解及示例代码
Aug 17 Javascript
详解基于vue-cli配置移动端自适应
Jan 13 Javascript
通过vue-cli3构建一个SSR应用程序的方法
Sep 13 Javascript
原生JS实现简单的无缝自动轮播效果
Sep 26 Javascript
vue-cli3.X快速创建项目的方法步骤
Nov 14 Javascript
node创建Vue项目步骤详解
Mar 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
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
linux中cd命令使用详解
2015/01/08 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
浅谈React 属性和状态的一些总结
2016/11/21 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
Vue filter介绍及其使用详解
2017/10/21 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
vue+element导航栏高亮显示的解决方式
2019/11/12 Javascript
jquery添加div实现消息聊天框
2020/02/08 jQuery
webpack5 联邦模块介绍详解
2020/07/08 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
python操作ie登陆土豆网的方法
2015/05/09 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
python实现linux下抓包并存库功能
2018/07/18 Python
python获取url的返回信息方法
2018/12/17 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
Python reques接口测试框架实现代码
2020/07/28 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
世界最大的私人旅行指南出版商:孤独星球
2016/08/23 全球购物
英语文学专业学生的自我评价
2013/10/31 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
乡镇团代会开幕词
2016/03/04 职场文书
煤矿施工安全协议书
2016/03/22 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
详解redis分布式锁的这些坑
2021/05/19 Redis
Python实现为PDF去除水印的示例代码
2022/04/03 Python