【问题标题】:MapBox (mapbox-gl-vue) renders the map on only 50% of the width of the containerMapBox (mapbox-gl-vue) 仅在容器宽度的 50% 上渲染地图
【发布时间】:2018-02-23 04:58:33
【问题描述】:

我正在尝试使用 Vue 2 的 MapBox,但我无法使地图占据容器的整个宽度。它仅在容器宽度的 50% 处呈现。

我在 index.html 的头部包含了如下文件:

<script src='https://api.mapbox.com/mapbox-gl-js/v0.40.0/mapbox-gl.js'></script>

<link href='https://api.mapbox.com/mapbox-gl-js/v0.40.0/mapbox-gl.css' rel='stylesheet' />

我想要一个组件中的地图(Map.vue,我用的是vue-router),所以这里是Map.vue中的代码:

脚本:

import Mapbox from 'mapbox-gl-vue';

export default {
  components: {
     'mapbox': Mapbox
  }
}

模板:

<mapbox access-token="pk.eyJ1Ijoic3BlZW5pY3Q....."
    :map-options="{
      style: 'mapbox://styles/mapbox/streets-v9',
      center: [-96, 37.8],
      zoom: 3
    }"
    :geolocate-control="{
      show: true, 
      position: 'top-left'
    }"
    :scale-control="{
      show: true,
      position: 'top-left'
    }"
    :fullscreen-control="{
      show: true,
      position: 'top-left'
    }">>
  </mapbox>

风格:

 #map {
 width: 100%;
 height: 600px;
 position: absolute;
 margin:0;
 z-index:1;
}

我已经在 CSS id 中尝试了我所知道的所有内容,但它仅在容器宽度的右半部分呈现地图,在左侧仅显示徽标和控件,而其余区域为空.

【问题讨论】:

    标签: vue.js vuejs2 mapbox mapbox-gl-js


    【解决方案1】:

    在我看来,div 有一些动态的东西,或者 div 在实例化后稍后呈现。不过我没用过vue。

    在页面加载后(例如在选项卡中或由 JavaScript 触发)呈现的选项卡和 div 存在此问题。

    如果您使用map.invalidateSize();,其中map 是实例化的对象。这将重绘地图。尝试在加载窗口后放置此代码以测试代码。那么或许可以转换成正确的Vue实现。

    window.addEventListener("load", function(){
        map.invalidateSize();
    });;
    

    【讨论】:

    • 我在对象上只有一个可用的 resize() 方法。 invalidateSize() 不可用并且 resize() 没有帮助。
    • 是的,resize 是 GL equiv。尝试回拨@map-load="mapLoaded" 并以这种方式调用它 - 这行得通吗?
    • 试过这种方式,它被调用但什么也没做。
    • 我当时很难过。如果您自己无法解决,我建议您将其发布为片段,以帮助其他 SO 用户帮助修复和测试它。
    • 如果您有兴趣,请查看我自己的答案。谢谢。
    【解决方案2】:

    为了解决这个问题,我只需要删除“text-align: center;”来自 App.vue 中的#app。

    有关更多详细信息,请查看我在此处打开的问题: https://github.com/phegman/vue-mapbox-gl/issues/11

    【讨论】:

    • 因为我想保留text-align: center;,所以我用text-align: left;在mapbox容器周围添加了一个&lt;div&gt;
    • 谢谢。这对我有用。即使我没有使用vue-mapbox-gl,我也遇到了同样的问题。 (我只是直接在 Vue 中使用 mapbox-gl)。
    • 它为我解决的问题数量之多真是太疯狂了,而且有点担心这是如何在幕后编码的。对我来说它解决了半屏,还解决了地图框水印样式,缩放不以鼠标为中心,地图不可移动......无论如何,谢谢
    猜你喜欢
    • 2021-04-25
    • 2020-07-17
    • 2018-04-20
    • 2019-12-01
    • 2015-10-07
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多