vue+vant ui+高德地图的选址组件
首先在index.html引入高德地图的js
<script src="https://webapi.amap.com/maps?v=1.4.14&key=你的key"></script>
然后写html部分
<template>
<div class="mymapM">
<!--捜索-->
<div v-if="loading" class="loading">
<van-loading type="spinner" />
</div> <div class="search-box">
<div class="search-postion">
<span class="buts">返回</span>
<input type="text" placeholder="输入关键字搜索" v-model="search_key" />
<span class="clear" v-if="search_key" @click="search_key ='' ">
<van-icon color="#8f8f8f" name="clear" />
</span>
<span class="buts border_but" @click="keySearch()">捜索</span>
</div>
</div>
<div class="con-box con-map" v-if="!search_key">
<!--地图-->
<div class="mapbox">
<div class="map" id="container"></div>
<div class="sign"></div>
</div>
</div>
<div class="con-box" v-if="!search_key">
<!--地址列表-->
<div class="Hlist-box">
<ul>
<li v-for="(item, index) in lists" :key="index" @click="onAddressLi(item)">
<b>
<van-icon color="#a6a6a6" name="clock" />
</b>
<div>
<span>{{item.name}}</span>
<p>{{item.address}}</p>
</div>
</li>
</ul>
</div>
</div>
<!--捜索列表-->
<div class="search-list" v-if="search_key">
<ul>
<li v-for="(item, index) in search_list" :key="index" @click="onSearchLi(item.location)">
<span>{{item.name}}</span>
<p>{{item.address}}</p>
</li>
<li v-if="noSearchShow">
<p>暂无搜索结果</p>
</li>
</ul>
</div>
</div>
</template>
css部分
<style lang="scss" scoped>
.con-map {
height: 190px;
width: 100%;
}
.con-box {
.mapbox {
margin-bottom: 10px;
position: fixed;
z-index:;
width: 100%;
height: 180px;
padding: 10px 0;
background: #eceeee; .map {
width: 100%;
height: 180px;
}
} .Hlist-box {
width: 96%;
margin: 0 auto; background: #fff;
border-radius: 5px;
li {
height: 40px;
padding: 14px 22px;
border-bottom: 1px solid #d9d9d9;
display: flex;
b {
display: inline-block; i {
margin: 18px 18px 0 0;
}
}
div {
width: 100%;
}
span {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
font-size: 15px;
display: inline-block;
width: 90%;
}
p {
margin-top: 10px;
color: #a6a6a6;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
font-size: 13px;
width: 90%;
}
}
}
}
.mymapM {
.search-box {
height: 48px; line-height: 48px;
background: #fff; border-bottom: 1px solid #bfbec4; .search-postion {
height: 48px;
line-height: 48px;
background: #fff;
border-bottom: 1px solid #bfbec4;
width: 100%;
position: fixed;
z-index:;
display: flex;
input {
flex:;
height: 14px;
padding: 16px 0;
border: none; text-indent: 10px;
}
.clear {
margin: 2px 6px;
}
.buts {
width: 15%;
text-align: center;
display: inline-block;
flex:;
}
.border_but {
border-left: 1px solid #8f8f8f;
height: 14px;
line-height: 14px;
margin: 17px 0;
}
}
}
.search-list {
width: 96%;
margin: 0 auto;
margin-top: 10px;
border-radius: 5px;
background: #fff;
li {
height: 40px;
padding: 14px 22px;
border-bottom: 1px solid #d9d9d9;
span {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
font-size: 15px;
display: inline-block;
width: 90%;
}
p {
margin-top: 10px;
color: #a6a6a6;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
font-size: 13px;
width: 90%;
}
}
}
}
.loading {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index:;
}
</style>
js部分
<script>
export default {
data() {
return {
center: [116.42792, 39.902896], //经度+纬度
search_key: "", //搜索值
lists: [], //地点列表
search_list: [], //搜索结果列表
marker: "",
loading: false,
noSearchShow: false //无搜索结果提示,无搜索结果时会显示暂无搜索结果
};
},
mounted() {
setTimeout(() => {
this.adMap();
}, 1000);
},
methods: {
adMap() {
this.loading = true;
//初始化地图
var map = new AMap.Map("container", {
zoom: 14, //缩放级别
center: this.center //设置地图中心点
//resizeEnable: true, //地图初始化加载定位到当前城市
});
//获取初始中心点并赋值
var currentCenter = map.getCenter(); //此方法是获取当前地图的中心点
this.center = [currentCenter.lng, currentCenter.lat]; //将获取到的中心点的纬度经度赋值给data的center
console.log(this.center); //创建标记
this.marker = new AMap.Marker({
position: new AMap.LngLat(currentCenter.lng, currentCenter.lat) // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
});
// 将创建的点标记添加到已有的地图实例:
map.add(this.marker); //根据地图中心点查附近地点,此方法在下方
this.centerSearch();
//监听地图移动事件,并在移动结束后获取地图中心点并更新地点列表
var moveendFun = e => {
// 获取地图中心点
currentCenter = map.getCenter();
this.center = [currentCenter.lng, currentCenter.lat];
this.marker.setPosition([currentCenter.lng, currentCenter.lat]); //更新标记的位置
//根据地图中心点查附近地点
};
//更新数据
var centerSearch = () => {
this.loading = true;
this.centerSearch();
}; // 绑定事件移动地图事件
map.on("mapmove", moveendFun); //更新标记
map.on("moveend", centerSearch); //更新数据
},
centerSearch() {
AMap.service(["AMap.PlaceSearch"], () => {
//构造地点查询类
var placeSearch = new AMap.PlaceSearch({
type:
"汽车服务|餐饮服务|购物服务|生活服务|体育休闲服务|医疗保健服务|住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务|交通设施服务|金融保险服务|公司企业|地名地址信息", // 兴趣点类别
pageSize: 30, // 单页显示结果条数
pageIndex: 1, // 页码
city: "全国", // 兴趣点城市
autoFitView: false // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
});
//根据地图中心点查附近地点
placeSearch.searchNearBy(
"",
[this.center[0], this.center[1]],
200,
(status, result) => {
if (status == "complete") {
this.lists = result.poiList.pois; //将查询到的地点赋值
this.loading = false;
}
}
);
});
},
keySearch() {
this.loading = true;
AMap.service(["AMap.PlaceSearch"], () => {
//构造地点查询类
var placeSearch = new AMap.PlaceSearch({
type:
"汽车服务|餐饮服务|购物服务|生活服务|体育休闲服务|医疗保健服务|住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务|交通设施服务|金融保险服务|公司企业|地名地址信息", // 兴趣点类别
pageSize: 30, // 单页显示结果条数
pageIndex: 1, // 页码
city: "全国", // 兴趣点城市
citylimit: false, //是否强制限制在设置的城市内搜索
autoFitView: false // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
});
//关键字查询
placeSearch.search(this.search_key, (status, result) => {
if (status == "complete") {
if (result.poiList.count === 0) {
this.noSearchShow = true;
} else {
this.search_list = result.poiList.pois; //将查询到的地点赋值
this.noSearchShow = false;
this.loading = false;
}
} else {
this.search_list = [];
this.noSearchShow = true;
}
});
});
},
onAddressLi(e) {
console.log(e);
this.marker.setPosition([e.location.lng, e.location.lat]); //更新标记的位置
},
onSearchLi(e) {
console.log(e.lng + "-" + e.lat);
this.center = [e.lng, e.lat];
console.log(this.center);
this.search_key = "";
// this.loading=true;
setTimeout(() => {
this.adMap();
}, 1000);
}
},
watch: {
search_key(newv, oldv) {
if (newv == "") {
this.search_list = [];
this.noSearchShow = false;
setTimeout(() => {
this.adMap();
}, 1000);
}
}
}
};
</script>
效果图


vue+vant ui+高德地图的选址组件的更多相关文章
- VUE 2.0 引入高德地图,自行封装组件
1. 高德地图官网 申请帐号, 申请相应(JavaScript API)的 Key 2. 在项目中引入, 这里和其他的引入不同的是 直接在 index.html, 不是在 main.js 引入, 博主 ...
- VUE 高德地图选取地址组件开发
高德地图文档地址 http://lbs.amap.com/api/lightmap/guide/picker/ 结合步骤: 1.通过iframe内嵌引入高德地图组件 key就选你自己申请的key &l ...
- 基于vue 2.X和高德地图的vue-amap组件获取经纬度
今天我就讲了一下怎么通过vue和高德地图开发的vue-amap组件来获取经纬度. 这是vue-amap的官网文档:https://elemefe.github.io/vue-amap/#/ 这是我的码 ...
- 在vue中使用高德地图vue-amap
1.安装 vue-amap我安装指定版本0.5.10的版本 npm i --save vue-amap@0.5.10 2.main.js中的配置 key申请地址教程:https://lbs.amap. ...
- vue+element ui 的表格列使用组件
前言:工作中用到 vue+element ui 的前端框架,有这个场景:很多表格的列有许多一样的,所以考虑将列封装为组件.转载请注明出处:https://www.cnblogs.com/yuxiaol ...
- 在vue中使用高德地图开发,以及AMap的引入?
百度引入BMap ,一个import 即可,可AMap 却报AMap is not difined ? 1.首先在 externals: { "BMap": "BMap& ...
- vue.js 使用高德地图
1.获取key值 注册成为高德开发者需要分三步: 第一步,注册高德开发者: 第二步,去控制台创建应用: 第三步,获取Key 2.修改配置文件 webpack.base.conf.js externa ...
- 如何在vue里面调用高德地图
1.修改webpac.base.conf.js文件 与module同一级添加 externals: { 'AMap': 'AMap', 'AMapUI': 'AMapUI' }配置. 然后在index ...
- vue 里面引入高德地图
效果图: 实现: 一:引入 高德,web-sdk (两种方式) 1:在html 中引入(我用的这一种) <script type="text/javascript" src= ...
随机推荐
- Http协议之content
用android 通过http协议提交数据至服务器 content的内容 代码如下: private static JSONObject connUpload(String baseUrl, Map& ...
- C++数组或vector求最大值最小值
可以用max_element()及min_element()函数,二者返回的都是迭代器或指针. 头文件:#include<algorithm> 1.求数组的最大值或最小值 1)vector ...
- matlab调用keras深度学习模型(环境搭建)
matlab没有直接调用tensorflow模型的接口,但是有调用keras模型的接口,而keras又是tensorflow的高级封装版本,所以就研究一下这个……可以将model-based方法和le ...
- sscanf linux-c从一个字符串中读进与指定格式相符的数据
https://www.cnblogs.com/lanjianhappy/p/6861728.html 函数原型: Int sscanf( string str, string fmt, mixed ...
- 【python之路46】内置函数2,是【python之路18】的补充
将3.5版本中的68个内置函数,按顺序逐个进行了自认为详细的解析.为了方便记忆,将这些内置函数进行了如下分类: 数学运算(7个) 类型转换(24个) 序列操作(8个) 对象操作(7个) 反射操作(8个 ...
- dubbo入门学习(四)-----dubbo配置
配置来源 首先,从Dubbo支持的配置来源说起,默认有四种配置来源: JVM System Properties,-D参数 Externalized Configuration,外部化配置 Servi ...
- Scrapy下载中间件的优先级(神踏马值越小优先级越高)
自从之前看的一篇讲Scrapy下载中间件的文章后,一直认为设置里下载中间件的优先级数值越小,越优先,最近要抓的网站反爬增强了,所以需要使用代理ip,但是由于使用的是免费代理以至于经常失效,需要对失效的 ...
- ECMAScript 5 严格模式
1. 变量必须使用var声明,杜绝不小心将本地变量声明成一个全局变量 在常规模式下,如果我们声明一个变量时省略了var关键字,解析引擎会自动将其声明为全局变量,但在严格模式下,会直接抛出异常,不会为我 ...
- 移动相关的css
1.首先认识第一个apple-mobile-web-app-capable 删除默认的苹果工具栏和菜单栏. <meta name="apple-mobile-web-app-capab ...
- hbase Hfile处理原因
Hile 内部的数据是按key排序好的,但Hfile之间数据并不能保证key的排序,也就是说对于新生成的Hfile,其内部的key并不都比老的Hfile的大,因此每次检索时,都需要在所有的Hfile中 ...