百度地图JsAPI:vue-webpack移动端画覆盖物不显示

使用vue-webpack开发,地图使用百度地图JsAPI,最近开发移动端的网页,发现webpack打包后的移动端界面地图显覆盖物示有问题。

1. vue-webpack环境覆盖物不显示

vue-webpack环境,在PC端的界面能正常显示百度地图,移动端地图能显示,但画上去的覆盖物(圆,正方形之类的覆盖物)不能显示;如果使用单页面,不是webpack打包可以移动端正常显示覆盖物。
vue-webpack PC端
vue-webpack PC
vue-webpack 移动端
vue-webpack移动
单HTML页面移动端
单页面html移动端

2. 查找原因

打印了覆盖物变量发现PC端覆盖物是SVG,移动端的覆盖物是Canvas

// 百度地图API功能
      var map = new BMap.Map("allmap");

      map.setMinZoom(3);
      map.setMaxZoom(19);
      // 添加控件
      map.addControl(
        new BMap.MapTypeControl({
          mapTypes: [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP]
        })
      );
      map.addControl(new BMap.ScaleControl());
      map.enableScrollWheelZoom(true);

      // 添加带有定位的导航控件
      var navigationControl = new BMap.NavigationControl({
        anchor: BMAP_ANCHOR_TOP_LEFT,
        type: BMAP_NAVIGATION_CONTROL_LARGE,
        enableGeolocation: true
      });
      map.addControl(navigationControl);

      var point = new BMap.Point(116.404, 39.915);
      map.centerAndZoom(point, 15);

      var marker = new BMap.Marker(new BMap.Point(116.404, 39.915)); // 创建点

      var circle = new BMap.Circle(point, 500, {
        strokeColor: "blue",
        strokeWeight: 2,
        strokeOpacity: 0.5
      }); //创建圆

      map.addOverlay(marker);
      map.addOverlay(circle);
      setTimeout(function(){
 console.log(circle);     
      },50)

PC端是SVG
PC端是svg
移动端是Canvas,vue-webpack环境下canvas的clientHeight和clientWidth(offseHeight,offsetWidth,scrollHeight,scrollWidth)为0,而单页面是canvas的clientHeight和clientWidth对应上width和height的值,所以vue-webpack环境下canvas不显示
移动端是canvas
移动端是canvas

3. 反馈问题

将问题反馈给百度地图的开发者平台,回答是暂时没有考虑兼容vue-webpack
在这里插入图片描述

4.解决办法

在这里插入图片描述
延时设置canvas的父容器和canvas的style为canvas的height和width

var circle = new BMap.Circle(point, 500, {
        strokeColor: "blue",
        strokeWeight: 2,
        strokeOpacity: 0.5
      }); //创建圆

      map.addOverlay(circle);
		setTimeout(function() {
        if (circle.V.tagName.toLowerCase() == "canvas") {
          circle.V.parentElement.style.width = circle.V.width + "px";
          circle.V.parentElement.style.height = circle.V.height + "px";
          circle.V.style.width = circle.V.width + "px";
          circle.V.style.height = circle.V.height + "px";
        }
        console.log(circle);
      }, 100);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值