百度地图元素宽度自适应的方法

在Vue项目中使用VueBaiduMap组件时,遇到地图宽度自适应的问题。初始设置地图宽度为元素宽度,点击折叠按钮后需更新地图宽度。尝试监听折叠按钮变化、元素resize事件及延时更新,但效果不佳。最后通过设置子元素宽度为100%,实现了地图宽度随屏幕变化自适应。
摘要由CSDN通过智能技术生成

在使用Vue框架搭建网站时,其中有一网页用于展示坐标点,使用Vue Baidu Map进行数据的绑定,地图初始时,宽度必须要设定,否则无法完成地图渲染。在<baidu-map>标签中设置style属性值如下:

<div id="map">
<baidu-map :style="{width:map.width,height:map.height}" />
</div>

在地图初始函数handler中设置地图的初始值,

this.map.width = document.getElementById("map").clientWidth +'px';
this.map.height = document.getElementById("map").clientHeight +'px';

当点击折叠菜单按钮时,通过获取元素map的宽度来刷新地图的宽度。但是尝试几个方法来设置都失败,最终将子元素宽度设置为100%后,地图宽度得以屏幕自适应,仰天一叹 😦 :吃了没有详细看CSS的亏。

首先看一下我都尝试了哪些操作。

一、计算方法

1.1 监听折叠按钮的变化,获取map的值

  collapsed: function (val){

      console.log('current map width', document.getElementById("map").clientWidth);

      this.bigWidth = 1051 +'px';

      if(val){

        this.smallWidth = document.getElementById("map").clientWidth +'px';

      }else{
        this.bigWidth = document.getElementById("map").clientWidth +'px';
      }

      if(val){

        this.map.width = this.bigWidth;

      }else{

        this.map.width = this.smallWidth;
      }

    },

结论:当监听到折叠按钮变化时,直接获取的是未进行更新的DOM元素的值,因此我还设置了宽度值,因为第一次获取的时候是undefined

1.2 监听map元素的resize变化,更新地图的宽度

import elementResizeDetectorMaker from "element-resize-detector";//导入该库
let that = this;
let elements = [];
elements.push(document.getElementById("map"));
elementResizeDetectorMaker().listenTo(elements,() => {
  that.map.width = document.getElementById("map").clientWidth;
  console.log(that.map.width);
});

结论:虽然能够取到折叠后的宽度,但是设置不生效,原因未知(估摸着是浏览器渲染问题,待深入研究其机理再分析,本文先提供几个试错的样本,避免再走弯路)。

1.3 延时更新map元素宽度

let  that = this;
setTimeout(()=>{
  that.map.width =  document.getElementById("map").clientWidth;
  console.log('setTimeout',that.map.width);
},1200);

结论:同1.2。

二、极简方法

通过style属性,将子元素宽度设置为100%。

:style="{width:'100%',height:map.height}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追寻上飞

鼓励一下这只勤劳的小蜜蜂吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值