地图消失了!

最近项目突然发现了一个奇怪的问题,当且到别的页面之后停留一会(20min+),首页的Echarts地图就会消失掉,而且还不一定复现,好不容易复现了一次,查看元素发现地图的容器、svg元素的高度都变成了0

经过多次测试发现只要切换到别的页面后改变一下浏览器窗口大小,再切回首页,地图就消失了

为什么高度没了?

首先看一下Echarts官网的示例


原因很明显了,我并没有给地图元素设定宽高

解决方法

固定宽高

一种方法是直接给地图容器加上固定的高度和宽度(不能使用百分比)

<div ref="map" class="map" style="width: 200px; height: 200px;"></div>

但是如果地图要随着窗口大小变化而变化,就不能这样写死了,要用下面这种办法:

不定宽高

在地图容器外面再套一层div,将它的宽高设置成100%,这样它的宽高就会随着视口变化而变化,然后通过js获取它的宽高赋值给地图容器的宽高,这样地图也就能动态变化了。

  • 为什么不直接给地图容器的宽高使用百分比呢?直接给它使用百分比会导致高度为0,所以必须得是一个具体的数值。

  • 外面的div也是百分比,如何获取它的具体宽高?通过window.getComputedStyle这个方法获取,它会返回计算之后的宽高。

    Window.getComputedStyle()方法返回一个对象,该对象在应用活动样式表并解析这些值可能包含的任何基本计算后报告元素的所有CSS属性的值。 私有的CSS属性值可以通过对象提供的API或通过简单地使用CSS属性名称进行索引来访问。

    关于这个属性可以查看MDN的介绍

HTML结构:

我的项目是基于Vue的,这里用的ref,后面获取时直接通过this.map获取DOM

<div class="map_box" ref="mapBox"><div ref="map" class="map"></div>
</div>

方法

//获取mapBox宽高并赋值给map
mapBoxResize(mapBox: HTMLDivElement, map: HTMLDivElement) {function getStyle(el: HTMLDivElement) {return window.getComputedStyle(el)}const wi = getStyle(mapBox).widthconst hi = getStyle(mapBox).heightmap.style.width = wimap.style.height = hi
}

在地图首次渲染时,我们需要调用上面这个函数,初始化地图容器的宽高

并且在resize事件和actived钩子中(地图组件使用keepAlive包裹),调用上面的函数设置地图容器宽高,但是光改变map容器的宽高是不够的,还需要调用地图实例的resize方法

// 地图重新渲染函数,重新渲染分为两步:重新设定map容器(不是mapBox,是map)的宽高、调用map实例resize方法
mapResize() {if (this.mapBox && this.map) {this.mapBoxResize(this.mapBox, this.map)}if (this.chart.resize) {this.chart.resize()}
}
activated() {this.mapResize()
}
mounted() {addEventListener('resize', this.mapResize)
}

至此,地图就不会消失了。

Vue+Echarts地图消失(高度变成0)的完美解决方案相关推荐

  1. vue+echarts地图 + 杭州市 + 点击穿透下面的区和县

    vue+echarts地图 + 杭州市 + 点击穿透下面的区和县 根据echarts Api 安装教程进行安装 npm install echarts --save 有需要的可以安装固定版本 npm ...

  2. vue + echarts+地图实现功能,实现地图上数据显示,四川省地图echarts地市数据案列

    echart在开发地图时,会遇到下钻显示子区域地图数据.比如四川省,下钻到市级成都市,再下钻到区级.下载地址:DataV.GeoAtlas地理小工具系列 1.首先需要下载对应的地图,如果是联网的可以直 ...

  3. vue echarts 地图

    本文以echarts官方文档的例子来介绍vue中使用echarts地图 echarts官方文档 https://www.echartsjs.com/zh/index.html 1.安装echarts插 ...

  4. vue echarts 地图立体 并设置tooltip属性背景图片

    这是做完的样子 1.地图立体的代码,map应与series中的一致 //地图立体的代码,map应与series中的一致 geo: {map: '34',aspectScale: 1, //长宽比zoo ...

  5. vue+echarts 地图携带参数下钻【demo二】

    相关必要文件已上传个人GIT代码库,自行下载 https://gitee.com/lemon-design/EchartsMapDeepDown.git 下钻数据为假数据 中国–>辽宁–> ...

  6. vue+echarts 地图携带参数下钻【demo一】

    相关必要文件已上传个人GIT代码库,自行下载 https://gitee.com/lemon-design/EchartsMap.git 个人鼓捣了快一周了 本文地图下钻部分通过watch监控返回数据 ...

  7. vue+echarts地图下钻(全国-省-市)

    本文中使用的数据为行政区编码json数据,大家自行下载.(本人超级菜鸟一枚,逻辑比较混乱,记录一下以免以后遇到相似功能忘记怎么写,也希望能帮到需要实现同样功能的人) 地图资源: 整体思路:1.先注册全 ...

  8. vue echarts地图省市区下钻详解

    哈喽你们好!我是小邱,应该会有很多朋友和我都是全栈,我希望今天发表的文章对大家能够有所帮助. 今天我又要说下我不太熟练地vue技术了 虽然不熟练啊但是思路清晰哈哈上码 如果你觉得我文章还不错就点个关注 ...

  9. vue echarts 地图外边框阴影

    这里部分写的假数据,根据需求修改 data() {return {myEcharts: null,scatterData: [{name: '广州市',value: [113.280637,23.12 ...

最新文章

  1. 使用Python判断俩张图像相同或以某种方式相似
  2. List 如何根据对象的属性去重?Java 8 轻松搞定!
  3. Boost CRC的测试程序
  4. java date.getyear_为什么Java的Date.getYear()返回111而不是2011?
  5. js中load载入html页面,使用jquery的load方法加载html页面,但是html引入的js不生效
  6. 你在闲鱼捡过最大的漏是什么?
  7. 2021计算机二级考试五月报名,2021年5月全国计算机等级考试报名时间
  8. JavaScript 图片转文字,文字转语音
  9. U盘启动盘制作,金士顿2GU盘量产工…
  10. 【Unity】 ios游戏开发中登陆 GameCenter的问题和脚本
  11. SEM数据该如何分析?
  12. Java实战项目:新手入门小游戏——连连看超详细教程
  13. java 1f8b0800,常用ASCII/ISO-8859-1/GB2312/GBK/UTF-8等字符编码梳理
  14. 用计算机打山有木兮,山有木兮 - 在线打字测试(dazi.kukuw.com)
  15. 浅谈Google SEO入行
  16. 移动时代的经济学——碎片化应用
  17. 凤姐模仿Lady Gaga 称和国外明星平起平坐(图)
  18. 从东方财富网站获取动态市盈率和市净率的爬虫代码
  19. windows安全警报怎么关闭_永久关闭WIN10自动杀毒(windows安全中心)
  20. 设计模式系列----备忘录模式

热门文章

  1. ​深圳国际会展中心希尔顿、茂名浪漫海岸喜来登度假、南昌青山湖希尔顿欢朋酒店开业 | 中国酒店周刊...
  2. 传教士与野人过河问题 人工智能实验算法
  3. 学生信息管理系统——python版(附流程图)
  4. 【设计模式】五:依赖倒置与里氏代换原则
  5. 使用pm命令安装或卸载apk,静默安装、卸载方法
  6. 运维工程师主要是做什么的?和网络工程师有啥区别?
  7. ElasticStack:使用FileBeat、Logstash、Elasticsearch、Kibana收集清洗存储查看分析数据
  8. Redis 知识点扫盲
  9. Python实现视频转 gif 动图
  10. JS实现点击按钮切换图片