减少Mapbox地图大小而不进行裁剪

时间:2017-11-15 13:41:38

标签: javascript html5-canvas mapbox mapbox-gl-js

无论容器的大小如何,我都希望我的Mapbox地图内容始终完全可见。 但是当地图非常小时,地图就会被裁剪掉。

以下是我所拥有的https://codepen.io/eddydg/pen/BmReEm

的示例

当您减小页面宽度时,它还会减小地图容器高度以保持其大小比例。但是地图不会进一步缩小以保持所有图层可见。

var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/mapbox/streets-v8',
    center: [0, 0],
    zoom: 0
});

window.addEventListener('resize', () => {
  map.zoomTo(0);
});
body {
  margin: 0;
  padding: 0;
}

.content {
  display: flex;
}

.column {
  -webkit-flex: 1 1 auto;
  flex: 1 1 auto;
  border: thin black solid;
  
  display: flex;
  align-items: center;
  justify-content: center;
  
  height: 400px;
}

.map-wrapper {
  position: relative;
  width: 100%;
  height: 30vw; /* 100% */
  max-width: 100%;
  max-height: 100%;
  background-color: teal;
}

#map {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 100%;
}
<script src="https://www.mapbox.com/help/data/codepen-token.js"></script>
<link href="https://api.tiles.mapbox.com/mapbox-gl-js/v0.12.2/mapbox-gl.css" rel="stylesheet"/>
<script src="https://api.tiles.mapbox.com/mapbox-gl-js/v0.12.2/mapbox-gl.js"></script>

<div class="content">
  <div class="column"></div>
  <div class="column"></div>
  <div class="column">
    <div class="map-wrapper">
      <div id='map'></div>
    </div>
  </div>
</div>

2 个答案:

答案 0 :(得分:1)

我认为你的问题在于,为了使地图大小调整,以便将所有视图保持在相同的小尺寸,它必须缩小到缩放级别0以外。这是不可能的。可能你可以使用CSS来破解一些东西来缩放具有像素比率的实际渲染地图。

答案 1 :(得分:1)

实际上this seems to be a bug在视口小于512px时发生。 它已经很老了,还没有修好。因此,作为一种解决方法,我最终在地图上使用了翻转效果:

  • 鼠标离开地图:增加地图大小(&gt; = = 512px以查看整个地图)并使用CSS将scale恢复为原始大小。您将看到整个地图(无论其大小),但所有交互都将被移动。
  • 将鼠标悬停在地图上:返回原点大小scale(1),以便裁剪地图,但您可以正确地与地图进行互动。