zoukankan      html  css  js  c++  java
  • bootstrap模态框引用百度地图出现中心点偏移到左上角

    当发生中心进行偏移到左上角的时候,我们要知道为什么会发生这个问题

      原因就是模态框在没有弹出的时候,即隐藏状态下,地图api会默认为宽高为0,所以他的初始宽高为0,因此中心点不管取什么值都会在左上角

    解决方案:

      我们首先要了解一个地图api的事件:tilesloaded  

      这个事件的作用就是当地图所有图块加载完成时才会触发,每次拖动地图也会触发tilesloaded事件

      所以我们可以在地图完全加载之后再次重新初始化生成地图,代码如下:

        注意:事件里面的代码是完整的初始化生成地图的代码

        

    var map = new BMap.Map('map_canvas');
    map.addEventListener("tilesloaded",function () {
      var map = new BMap.Map('map_canvas');
      map.enableScrollWheelZoom();
      // console.log(PointArr)
      var p = Math.ceil(PointArr.length / 2);
      map.centerAndZoom(new BMap.Point(PointArr[p].x, PointArr[p].y), 15);
     
      var driving;
      for(var i in PointArr){
      if(i == 0 ){
      addMarker(new BMap.Point(PointArr[i].x, PointArr[i].y),"起点");
      continue;
      }
      driving = new BMap.DrivingRoute(map, {renderOptions:{map: map, autoViewport: false},
      onMarkersSet:function(routes) {
      map.removeOverlay(routes[0].marker); //删除API自带起点
      map.removeOverlay(routes[1].marker); //删除API自带终点
      }});
      driving.search(new BMap.Point(PointArr[i-1].x, PointArr[i-1].y),
      new BMap.Point(PointArr[i].x, PointArr[i].y));
      if(i == PointArr.length -1){
      addMarker(new BMap.Point(PointArr[i].x, PointArr[i].y),"终点");
      }
      }
      /**
      * 标记
      * @param {Object} point
      */
      function addMarker(point,name){
      var marker = new BMap.Marker(point);
      var label = new BMap.Label(name, {
      offset : new BMap.Size(20, -10)
      });
      marker.setLabel(label);
      map.addOverlay(marker);
      }
    })
    map.enableScrollWheelZoom();
    // console.log(PointArr)
    var p = Math.ceil(PointArr.length / 2);
    map.centerAndZoom(new BMap.Point(PointArr[p].x, PointArr[p].y), 15);
     
    var driving;
    for(var i in PointArr){
    if(i == 0 ){
    addMarker(new BMap.Point(PointArr[i].x, PointArr[i].y),"起点");
    continue;
    }
    driving = new BMap.DrivingRoute(map, {renderOptions:{map: map, autoViewport: false},
    onMarkersSet:function(routes) {
    map.removeOverlay(routes[0].marker); //删除API自带起点
    map.removeOverlay(routes[1].marker); //删除API自带终点
    }});
    driving.search(new BMap.Point(PointArr[i-1].x, PointArr[i-1].y),
    new BMap.Point(PointArr[i].x, PointArr[i].y));
    if(i == PointArr.length -1){
    addMarker(new BMap.Point(PointArr[i].x, PointArr[i].y),"终点");
    }
    }
    /**
    * 标记
    * @param {Object} point
    */
    function addMarker(point,name){
    var marker = new BMap.Marker(point);
    var label = new BMap.Label(name, {
    offset : new BMap.Size(20, -10)
    });
    marker.setLabel(label);
    map.addOverlay(marker);
    }

        

  • 相关阅读:
    Unity3D Editor模式下批量修改prefab
    3D touch在Unity3D中的使用
    Unity中的协程是什么?
    Unity3D脚本调用Objective C代码实现游戏内购买
    WindowsPhone8拍照功能实现简介
    WindowsPhone App如何扩展能够使用的内存
    SVN 提交代码时提示文件已经存在解决办法
    iOS检查App新版本并更新新版本
    iOS存储数据字典到沙盒
    统计整个Xcode工程代码行数
  • 原文地址:https://www.cnblogs.com/md-lw/p/10245133.html
Copyright © 2011-2022 走看看