引入
在index.html文件中引入腾讯地图js文件,XXX
为你申请的key
<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=XXX"></script>
注意事项:为显示地图的元素设置宽高
<div id="container"></div>
单个标注点
js: 在mounted生命周期或者从后台接口获得信息后调用初始化地图方法
initMap (latitude, longitude, message) {
// 中心坐标 var center = new qq.maps.LatLng(latitude, longitude); var map = new qq.maps.Map( document.getElementById("container"), { center: center, // 缩放级别 zoom: 13 } ); // 创建标记 var marker = new qq.maps.Marker({ // 标记的位置 position: center, map: map }); // 提示窗 var info = new qq.maps.InfoWindow({ map: map }); // 悬浮标记显示信息 qq.maps.event.addListener(marker, 'mouseover', function() { info.open(); info.setContent(`<div style="margin:10px;">${message}</div>`); info.setPosition(center); }); qq.maps.event.addListener(marker, 'mouseout', function() { info.close(); });},
多个标注点
存放标注点数组的格式:
markers: [
{ "id":1, "name":"北京后海酒店", "latitude":"39.92300000", "longitude":"116.5200000000" }, { "id":2, "name":"北京七天酒店", "latitude":"39.9254100000", "longitude":"116.5220000000" } ]
方法:
initMap (arr) {
// 默认以数组第一项为中心 var center = new qq.maps.LatLng(arr[0].latitude, arr[0].longitude); var map = new qq.maps.Map( document.getElementById("container"), { center: center, zoom: 13 } ); // 提示窗 var info = new qq.maps.InfoWindow({ map: map }); for (var i = 0; i < arr.length; i++) { var data = arr[i]; // 创建标记 var marker = new qq.maps.Marker({ position: new qq.maps.LatLng(data.latitude, data.longitude), map: map }); // 将必要的数据存入每一个对应的marker对象 marker.id = data.id; marker.name = data.name; // 为标记添加事件,这里可改为点击事件 qq.maps.event.addListener(marker, 'mouseover', function() { info.open(); // 设置提示窗内容(this指向marker对象) info.setContent(`<div><p>${this.name}</p></div>`); // 提示窗位置 info.setPosition(new qq.maps.LatLng(this.position.lat, this.position.lng)); }); qq.maps.event.addListener(marker, 'mouseout', function() { info.close(); }); }}
调用时直接将数组传参就可以了,在mounted或调取接口后
mounted () {
this.initMap(this.markers)},
列表和地图联动
js:
showMapMarker (listItem) {
// 重新渲染地图,以当前选中项经纬度为中心,显示所有标注点 var center = new qq.maps.LatLng(listItem.latitude, listItem.longitude); var map = new qq.maps.Map( document.getElementById("container"), { center: center, zoom: 13 } ); var info = new qq.maps.InfoWindow({ map: map }); for (var i = 0; i < this.markers.length; i++) { var data = this.markers[i]; var marker = new qq.maps.Marker({ position: new qq.maps.LatLng(data.latitude, data.longitude), map: map }); marker.id = data.id; marker.name = data.name; // 为标记添加点击事件 qq.maps.event.addListener(marker, 'click', function() { info.open(); info.setContent(`<div><p>${this.name}</p></div>`); info.setPosition(new qq.maps.LatLng(this.position.lat, this.position.lng)); }); } // 当前点击列表项在地图上显示对应的标注提示 info.open(); info.setContent(`<div><p>${listItem.name}</p></div>`); info.setPosition(new qq.maps.LatLng(listItem.latitude, listItem.longitude));}
跳转
qq.maps.event.addListener(marker, 'click', function() { info.open(); info.setContent(`<div> <p>${this.name}</p> <p onclick="${lookDetail(this)}" style="cursor: pointer;">查看</p> </div>`); info.setPosition(new qq.maps.LatLng(this.position.lat, this.position.lng));});var that = thisfunction lookDetail (item) { that.$router.push({ name: 'contentDetail', query: { id: item.id, } });}
最后,我发现点击标注跳转下个页面出了问题,在setContent
中加了点击跳转的按钮后,发现要不然就是不能跳转,要不然就是点击蓝色标注按钮就直接跳转走了,不会打开显示信息。所以,这么写是不对的。