首页 > 其他分享 >解决vue中mapbox地图显示一半的问题

解决vue中mapbox地图显示一半的问题

时间:2023-07-05 13:11:35浏览次数:35  
标签:map canvas vue center 地图 zoom mapbox mapboxGl

解决vue中mapbox地图显示一半的问题

问题描述: 在vue中创建mapbox地图,地图只显示一般,查看浏览器开发者工具。发现将canvas.mapboxgl-canvasposition:absolute去掉就解决了 。

代码修改:获取到canvas.mapboxgl-canvas,并修改其position样式就ok

image-20230705125358223

image-20230705125532012

修改前代码:

<template>
    <main>
        <p>Center :{{center}}</p>
        <p>Zoom : {{ zoom }}</p>
        <div id="map" class="map-container" ref="mapContainer">
        </div>
    </main>
  </template>
  
<script>
import mapboxGl from "mapbox-gl";

export default {
    name:"MapMapbox",
    data(){
        return {
            center:[-93.1247, 44.9323],
            zoom:10.5
        }
    },
    mounted() {
    mapboxGl.accessToken = "your_mapbox_token";
    this.createMap();
    console.log(this.map)
},
    methods: {
        createMap() {
            this.map = new mapboxGl.Map({
                container: "map",
                style: "mapbox://styles/mapbox/streets-v9",
                minzoom: 5,
                center: this.center,
                zoom: this.zoom,
                hash: true
            });

            this.map.on("move", () => {
                this.center = this.map.getCenter();
            });
            this.map.on("zoom", () => {
                this.zoom = this.map.getZoom();
            });
        }
    },
    beforeDestroy() {
    if (this.map) {
        this.map.remove();
    }
}

}


</script>

<style scoped>
.map-container {
  height: 500px;
  width: 100%;
}
</style>

修改后

添加

this.map.on("load", () => {
    // Wait for map to load before modifying styles
    const canvas = this.$refs.mapContainer.querySelector('.mapboxgl-canvas');
    canvas.style.position = 'relative';
});

完整代码:

<template>
    <main>
        <p>Center :{{center}}</p>
        <p>Zoom : {{ zoom }}</p>
        <div id="map" class="map-container" ref="mapContainer">
        </div>
    </main>
  </template>
  
<script>
import mapboxGl from "mapbox-gl";

export default {
    name:"MapMapbox",
    data(){
        return {
            center:[-93.1247, 44.9323],
            zoom:10.5
        }
    },
    mounted() {
    mapboxGl.accessToken = "pk.eyJ1Ijoic2hleXVleXUiLCJhIjoiY2wxcTh1dTRoMGE5ZzNtbzNxMW44dWVmNyJ9.XTW1j_KCti0TbZFYIyp-uA";
    this.createMap();
    console.log(this.map)
},
    methods: {
        createMap() {
            this.map = new mapboxGl.Map({
                container: "map",
                style: "mapbox://styles/mapbox/streets-v9",
                minzoom: 5,
                center: this.center,
                zoom: this.zoom,
                hash: true
            });
            this.map.on("load", () => {
                // Wait for map to load before modifying styles
                const canvas = this.$refs.mapContainer.querySelector('.mapboxgl-canvas');
                canvas.style.position = 'relative';
            });
            this.map.on("move", () => {
                this.center = this.map.getCenter();
            });
            this.map.on("zoom", () => {
                this.zoom = this.map.getZoom();
            });
        }
    },
    beforeDestroy() {
    if (this.map) {
        this.map.remove();
    }
}

}


</script>

<style scoped>
.map-container {
  height: 500px;
  width: 100%;
}
</style>

标签:map,canvas,vue,center,地图,zoom,mapbox,mapboxGl
From: https://www.cnblogs.com/aleza/p/17528256.html

相关文章

  • vue项目动态菜单import运行报错【转】
    Modulebuildfailed(from./node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader/index.js):TypeError:Cannotreadproperty‘range’ofnull 1.从git拉取的项目,下载依赖后就报Modulebuildfailed(from./node_modules/@vue/cli-plugin-eslint/node_modu......
  • vue项目报错:Node.js v18.16.1 error Command failed with exit code 1.
    原因:把node升级到了最新的长期支持版18.16.1,结果运行vue项目启动失败,报错如下:试了各种办法都解决不了,后面只能把node降级到16.20.1运行项目又可以启动了......
  • vue渲染原理简单实现
    实现功能:1.渲染系统:·功能一:h函数,用于创建并返回一个VNode(虚拟对象);·功能二:mount函数,用于将VNode挂载到节点上;·功能三:patch函数,用于对比两个VNode,决定该如何处理新的VNode;1.新建一个index.html的页面其中有一个id为app的div元素,之后我们写的所有DOM都会挂载到此元素......
  • Vue项目引入Bootstrap5步骤
    1、在工程项目下安装Bootstrap5依赖包[email protected]或者[email protected]、安装安装jqueryBootstrap有js函数,必须新引入jquerynpminstalljquery--save3、在vue.config.js配置jQuery插件的参数module.exports=......
  • Vue, Django | 数据可视化平台开发
    给公司搞了个互联网设备可视化平台,在地图上展示互联网设备的信息,点击地图不同区域,统计相应的设备信息,生成图表展示出来用的vue-big-screen框架,在原框架基础上,主要干了下面几件事:1.下载不同区域的geojson数据,点击大图的不同区域,调用mapclick方法,将子区域的geojson数据加载出来2......
  • 前端Vue自定义轮播图视频播放组件 仿京东商品详情轮播图视频Video播放效果 可图片预览
    前端Vue自定义轮播图视频播放组件仿京东商品详情轮播图视频Video播放,可图片预览,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13325效果图如下:cc-videoSwiper使用方法<!--goodsData:轮播图视频数据 @setShowVideo:视频按钮点击事件-......
  • 前端Vue一款基于canvas的精美商品海报生成组件 根据个性化数据生成商品海报图 长按
    前端Vue一款基于canvas的精美商品海报生成组件根据个性化数据生成商品海报图长按保存图片,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13326效果图如下:cc-beautyPoster使用方法<!--posterData:海报数据--><cc-beautyPoster:poste......
  • vue2-样式冲突-使用deep修改子组件中的样式
    /deep/样式穿透<template><divclass="left-container"><h3>Left组件</h3><my-count:init="9"></my-count></div></template><script>exportdefault{}</scrip......
  • vuE初探[230704]
    vue语法初探课前须知知识储备:html、JavaScript、css(node、npm、webpack)课程介绍进阶式:基础:生命周期函数条件循环渲染指令、页面样式修饰语法···组件:全局&局部、数据传递、插槽基础···动画:单组件元素、列表&状态动画、CSS和JS动画···高级扩展语法:Mixin混入、V......
  • Vue02
    1.Vue计算属性和watch监听1.1.计算属性<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><!--引入vue.js--><scriptsrc="node_modules/vue/dist/vue......