Vue项目引用百度地图并设置鼠标滑过时显示数据

公司要求在云平台上添加一个页面,调用百度地图,在上面标记相关地点,鼠标滑过是显示该地点的数据,点击标记跳转到详细数据浏览页面。一边做一边百度终于实现了(#.#)。

一、vue中引入百度地图接口

1.下载百度地图插件

npm install vue-baidu-map --save

2.在index.html中引入
 <script type="text/javascript"
        src="//api.map.baidu.com/api?v=2.0&ak=秘钥"></script>

秘钥自己申请或者百度一个都可

二、使用百度地图

1.创建一个div来放百度地图,一定要给div设置宽度和高度,才能显示出来。
 <div class="baidumap" id="allmap"></div>
2.定义baiduMap()方法创建地图实例,在mounted周期中调用。list是存在本地的数据,获取数据的方法在created周期中被调用。list中的数据包括id、name、longitude和lantitude,如果不需要从数据库中调用,可以在data中自己定义一个数组来存放这些数据。infoMessage为提示框中显示的消息,可以根据自己的需要进行修改。
mounted() {
    this.baiduMap();
  },
   baiduMap() {
      var map = new BMap.Map("allmap"); // 创建地图实例
      for (var i = 0; i < this.list.length; i++) {
        var point = new BMap.Point(
          this.list[i].longitude,
          this.list[i].latitude
        );
        var infoMessage =this.list[i].name;
        //如果要显示其他数据,加到infoMessage中
         infoMessage += "<br><br><div class='nodate'>无数据!</div>";
        //调用创建marker标记的方法,
        var marker = this.createMarker(
          point,
          infoMessage,
          this.list[i].number,
        );
        map.addOverlay(marker); //添加marker
        var fNameLabel = this.setLabelStyle(this.list[i].name);
        marker.setLabel(fNameLabel); // 添加百度label*/
      }
      var center = new BMap.Point(118.546015, 36.735546); //设置中心点坐标
      map.centerAndZoom(center, 8); //设置中心点和地图级别
      map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
      map.addControl(new BMap.NavigationControl());
      map.addControl(new BMap.ScaleControl());
      map.addControl(new BMap.OverviewMapControl());
      map.addControl(new BMap.MapTypeControl());
    },
3.创建marker标记和信息提示框的方法
//创建maeker和infowindow
    //传入的参数为:坐标,弹框中要显示的信息,厂区号
    createMarker(point, iw, paramNumber) {
      var markerx = new BMap.Marker(point);
      //鼠标停留发生的事件
      markerx.addEventListener("mouseover", function(e) {
        this.openInfoWindow(new BMap.InfoWindow(iw));
      });
      //鼠标划出发生的事件
      markerx.addEventListener("mouseout", function(e) {
        this.closeInfoWindow(new BMap.InfoWindow(iw));
      });
      //点击标记发生的事件
      var that = this;
      markerx.addEventListener("click", function(e) {
        that.$router.push({
          path: "点击之后要跳转的路径",
          query: {
            paramnumber: paramNumber
          }//给跳转页面传递的参数
        });
      });
      return markerx;
    },

三、总代码

<template>
  <div class="app-container">
    <div class="baidumap" id="allmap"></div>
  </div>
</template>

<script>
export default {
  name: "pm-distribution",
  components: {},
  data() {
    return {
      tokenPiece: this.$store.state.user.token.split(".")[1].slice(-34, -25),
      visible: null,
      paramNumber: null, //页面跳转传递的厂区号
      list: null,
      flag: true,
      listLoading:true,
      }
  },
  created() {
    this.fetchData();
  },
  mounted() {
    this.baiduMap();
  },
  methods: {
    fetchData() {
      this.listLoading = true;
      this.list = this.$store.state.user.factoryInfo;
      this.listLoading = false;
      for (var i = 0; i < this.list.length; i++) {
        this.factory = this.list[i].number;
       /*  this.queryGroup(); */
      }
    },
     baiduMap() {
      var map = new BMap.Map("allmap"); // 创建地图实例
      for (var i = 0; i < this.list.length; i++) {
        var point = new BMap.Point(
          this.list[i].longitude,
          this.list[i].latitude
        );
        var infoMessage =this.list[i].name;
        //如果要显示其他数据,加到infoMessage中
         infoMessage += "<br><br><div class='nodate'>无数据!</div><br><span class='reminder'>点击标记获取更多信息</span>";
        //调用创建marker标记的方法,
        var marker = this.createMarker(
          point,
          infoMessage,
          this.list[i].number,
        );
        map.addOverlay(marker); //添加marker
      }
      var center = new BMap.Point(118.546015, 36.735546); //设置中心点坐标
      map.centerAndZoom(center, 8); //设置中心点和地图级别
      map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
      map.addControl(new BMap.NavigationControl());
      map.addControl(new BMap.ScaleControl());
      map.addControl(new BMap.OverviewMapControl());
      map.addControl(new BMap.MapTypeControl());
    },
  //创建maeker和infowindow
    //传入的参数为:坐标,弹框中要显示的信息,厂区号
    createMarker(point, iw, paramNumber) {
      var markerx = new BMap.Marker(point);
      //鼠标停留发生的事件
      markerx.addEventListener("mouseover", function(e) {
        this.openInfoWindow(new BMap.InfoWindow(iw));
      });
      //鼠标划出发生的事件
      markerx.addEventListener("mouseout", function(e) {
        this.closeInfoWindow(new BMap.InfoWindow(iw));
      });
      //点击标记发生的事件
      var that = this;
      markerx.addEventListener("click", function(e) {
        that.$router.push({
          path: "点击之后要跳转的路径",
          query: {
            paramnumber: paramNumber
          }//给跳转页面传递的参数
        });
      });
      return markerx;
    },
  }
};
</script>
<style >
.baidumap {
  width: 100%;
  height: 650px;
}
/* 去除百度地图版权那行字 和 百度logo */
.baidumap > .BMap_cpyCtrl {
  display: none !important;
}
.baidumap > .anchorBL {
  display: none !important;
}
/* 弹出框中标题样式 */
.title {
  color: darkgreen;
  text-align: center;
  height: 10px;
}
/* 弹出框中提示“无数据”的样式 */
.nodate {
  color: dimgrey;
  text-align: center;
}
/* 弹出框底部的点击提示样式 */
.reminder {
  font-size: 12px;
  color: darkcyan;
  margin-left: 100px;
}
</style>

四、效果图

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值