返回
Vue 调用百度地图 API,区级覆盖物鼠标交互,信息盒子显示及关闭按钮隐藏
前端
2023-12-17 13:51:43
- 引入百度地图 API
在需要使用百度地图的 Vue 组件中,需要首先引入百度地图 API。以下是在 index.html
中引入百度地图 API 的示例:
<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=YOUR_API_KEY"></script>
其中,YOUR_API_KEY
是您的百度地图 API 密钥。
2. 初始化百度地图
在 Vue 组件中,可以使用 mounted()
生命周期钩子来初始化百度地图。在 mounted()
钩子中,可以创建一个百度地图实例,并将其赋给 this.map
属性。以下是在 Vue 组件中初始化百度地图的示例:
export default {
mounted() {
this.map = new BMap.Map("map-container");
this.map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
},
};
3. 添加区级覆盖物
要在地图上添加区级覆盖物,可以使用 addOverlay()
方法。以下是在 Vue 组件中添加区级覆盖物的示例:
export default {
mounted() {
this.map = new BMap.Map("map-container");
this.map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
// 获取区级边界数据
const districtBoundaries = require("./district-boundaries.json");
// 遍历区级边界数据
districtBoundaries.features.forEach((feature) => {
// 创建区级覆盖物
const districtOverlay = new BMap.Polygon(feature.geometry, {
strokeColor: "#ff0000",
strokeWeight: 2,
fillOpacity: 0.5,
fillColor: "#ff0000",
});
// 添加区级覆盖物到地图上
this.map.addOverlay(districtOverlay);
});
},
};
4. 鼠标移动上去变换样式
要实现鼠标移动到区级覆盖物上时变换样式,可以使用 addEventListener()
方法。以下是在 Vue 组件中实现鼠标移动上去变换样式的示例:
export default {
mounted() {
this.map = new BMap.Map("map-container");
this.map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
// 获取区级边界数据
const districtBoundaries = require("./district-boundaries.json");
// 遍历区级边界数据
districtBoundaries.features.forEach((feature) => {
// 创建区级覆盖物
const districtOverlay = new BMap.Polygon(feature.geometry, {
strokeColor: "#ff0000",
strokeWeight: 2,
fillOpacity: 0.5,
fillColor: "#ff0000",
});
// 鼠标移动到区级覆盖物上时变换样式
districtOverlay.addEventListener("mouseover", () => {
districtOverlay.setStrokeColor("#00ff00");
districtOverlay.setFillColor("#00ff00");
});
// 鼠标移出区级覆盖物时恢复样式
districtOverlay.addEventListener("mouseout", () => {
districtOverlay.setStrokeColor("#ff0000");
districtOverlay.setFillColor("#ff0000");
});
// 添加区级覆盖物到地图上
this.map.addOverlay(districtOverlay);
});
},
};
5. 显示信息盒子
要在地图上显示信息盒子,可以使用 openInfoWindow()
方法。以下是在 Vue 组件中显示信息盒子的示例:
export default {
mounted() {
this.map = new BMap.Map("map-container");
this.map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
// 获取区级边界数据
const districtBoundaries = require("./district-boundaries.json");
// 遍历区级边界数据
districtBoundaries.features.forEach((feature) => {
// 创建区级覆盖物
const districtOverlay = new BMap.Polygon(feature.geometry, {
strokeColor: "#ff0000",
strokeWeight: 2,
fillOpacity: 0.5,
fillColor: "#ff0000",
});
// 鼠标移动到区级覆盖物上时显示信息盒子
districtOverlay.addEventListener("mouseover", () => {
districtOverlay.setStrokeColor("#00ff00");
districtOverlay.setFillColor("#00ff00");
// 创建信息盒子
const infoWindow = new BMap.InfoWindow(`<div><h3>${feature.properties.name}</h3><p>${feature.properties.description}</p></div>`);
// 打开信息盒子
this.map.openInfoWindow(infoWindow, districtOverlay.getPosition());
});
// 鼠标移出区级覆盖物时关闭信息盒子
districtOverlay.addEventListener("mouseout", () => {
districtOverlay.setStrokeColor("#ff0000");
districtOverlay.setFillColor("#ff0000");
// 关闭信息盒子
this.map.closeInfoWindow();
});
// 添加区级覆盖物到地图上
this.map.addOverlay(districtOverlay);
});
},
};
6. 隐藏信息盒子的关闭按钮
要隐藏信息盒子的关闭按钮,可以使用 hideCloseButton()
方法。以下是在 Vue 组件中隐藏信息盒子的关闭按钮的示例:
export default {
mounted() {
this.map = new BMap.Map("map-container");
this.map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
// 获取区级边界数据
const districtBoundaries = require("./district-boundaries.json");
// 遍历区级边界数据
districtBoundaries.features.forEach((feature) => {
// 创建区级覆盖物
const districtOverlay = new BMap.Polygon(feature.geometry, {
strokeColor: "#ff0000",
strokeWeight: 2,
fillOpacity: 0.5,
fillColor: "#ff0000",
});
// 鼠标移动到区级覆盖物上时显示信息盒子
districtOverlay.addEventListener("mouseover", () => {
districtOverlay.setStrokeColor("#00ff00");
districtOverlay.setFillColor("#00ff00");
// 创建信息盒子
const infoWindow = new BMap.InfoWindow(`<div><h3>${feature.properties.name}</h3><p>${feature.properties.description}</p></div>`);
// 隐藏信息盒子的关闭按钮
infoWindow.hideCloseButton();
// 打开信息盒子
this.map.openInfoWindow(infoWindow, districtOverlay.getPosition());
});
// 鼠标移出区级覆盖物时关闭信息盒子
districtOverlay.addEventListener("mouseout", () => {
districtOverlay.setStrokeColor("#ff0000");
districtOverlay.setFillColor("#ff0000");
// 关闭信息盒子
this.map.closeInfoWindow();
});
// 添加区级覆盖物到地图上
this.map.addOverlay(districtOverlay);
});
},
};
7. 完整示例
以下是一个完整的示例,展示了如何使用 Vue.js 调用百度地图 API,添加区级覆盖物,并实现鼠标移动上去时变换样式、显示信息盒子,以及隐藏信息盒子的关闭按钮的功能:
export default {
mounted() {
this.map = new BMap.Map("map-container");
this.map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
// 获取区级边界数据
const districtBoundaries = require("./district-boundaries.json");
// 遍历区级边界数据
districtBoundaries