<template> <div> <div id="bmap-container"></div> </div> </template> <script> export default { data() { return { BMap: {}, map: {}, marker: {} }; }, mounted() { this.$nextTick(() => { this.loadScript(() => { setTimeout(() => { this.initMap(); }, 200); }); }); }, props: { bMapKey: { type: String, default: "e4VdXT4TQIexra84v22yLrO8sswkTNMX" } }, methods: { // 初始化地图 initMap() { // 从window上获取BMapGL,挂载在当前vue对象 this.BMap = window.BMapGL; console.log(this.BMap); this.map = new this.BMap.Map("bmap-container"); // 创建地图实例 let point = new this.BMap.Point(116.404, 39.915); // 创建点坐标 this.map.centerAndZoom(point, 15); // 初始化地图,设置中心点坐标和地图级别 // this.map.enableScrollWheelZoom(true); this.map.setHeading(64.5); //设置地图旋转角度 this.map.setTilt(73); //设置地图的倾斜角度 this.createMapMarker();//创建生成marker this.map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放 this.createControl();//创建控件 let navi3DCtrl = new this.BMap.NavigationControl3D(); // 添加3D控件 this.map.addControl(navi3DCtrl); this.clickEventHnadler();//点击事件 }, // 点击地图事件 clickEventHnadler(){ this.map.addEventListener('click', (res)=>{ console.log(res); }); }, // 创建marker createMapMarker() { this.marker = new this.BMap.Marker(new this.BMap.Point(116.404, 39.915)); // 创建点 this.map.addOverlay(this.marker); }, // 创建控件 createControl() { let scaleCtrl = new this.BMap.ScaleControl(); // 添加比例尺控件 this.map.addControl(scaleCtrl); let zoomCtrl = new this.BMap.ZoomControl(); // 添加比例尺控件 this.map.addControl(zoomCtrl); }, // 加载百度地图api loadScript(callback) { console.log(this.bMapKey); var script = document.createElement("script"); script.type = "text/javascript"; script.src = `https://api.map.baidu.com/api?v=1.0&type=webgl&ak=${this.bMapKey}&callback=initialize`; document.body.appendChild(script); if (script.readyState) { //IE //这里只有反人类设计的IE才有 script.onreadystatechange = function() { if ( script.readyState == "complete" || script.readyState == "loaded" ) { script.onreadystatechange = null; //callback&&callback()是判断传入的回调函数是不是空的如果是空的就不执行,如果不是空的就执行 callback && callback(); } }; } else { //非IE script.onload = function() { callback && callback(); }; } } } }; </script> <style lang="less" scoped> #bmap-container { height: 400px; } </style>