echarts-extension-gmap 踩坑

7 篇文章 0 订阅
4 篇文章 0 订阅
文章讲述了在使用echarts-extension-gmap组件时遇到的全屏模式下坐标点被遮罩的问题,分析了问题的原因是全屏后Canvas未重绘。解决方案是监听GoogleMap的idle事件,在全屏状态下修改容器样式为position:fixed并调用echarts.resize()进行重绘,从而确保Canvas与窗口大小一致。
摘要由CSDN通过智能技术生成

一、非全屏使用组件,放大后图表遮罩

1. 使用 echarts-extension-gmap

echarts-extension-gmap 是基于 Google Map API 的地图组件。扩展 goole 地图功能,如:添加坐标点,图表等。
使用方法参考:echarts-extension-gmap

2. echarts-extension-gmap 绘制坐标点、图标。

通过调试,发现 echarts-extension-gmap 在 Google Map 图层上额外增加了一个 Canvas,
并在新增 Canvas 上进行坐标点、图标绘制。

新增的Canvas

3. 出现的问题

Gmap 在非全屏状态使用,加载完成后,点击 Gmpa 右上角全屏按钮,绘制的坐标点和图表会被遮罩。
原因: Gmap 放大后触发重排重绘,但是没有对 Canvas 图层进行重绘。

二、找到问题

1. Gmap 容器在渲染完成后会增加默认样式

Gmap 初始化后,容器会被添加 position: relative; 等样式。有些会影响 canvas 的展开,需要更改。
样式强制修改

三、解决方法

1. 找打 Gmap 判定全屏事件 API

Google Map API 中提供了 idle 事件监听(空闲事件),可以利用 Goolgle Map .gm-style 元素大小与 window 大小比较,来判定是否切换了全屏。

2. 全屏回调中重绘 Canvas

  1. 修改 Gmap 容器样式 position: fixed;
  2. 全屏回调中调用 eachart.resize(),对 Canvas 元素重绘 。此时 Canvas 重新计算父容器宽高,与 window 大小一致。

四、代码实现

1. 首先定义 Gmap 容器

<template>
  <div id='gMap'></div>
</template>

2. 添加 idle 事件监听,全屏事件中 resize

// Idle 事件
this.gmap = this.chart.getModel().getComponent('gmap').getGoogleMap()
this.gmap.addListener('idle', () => {
  const domGmstyle = document.getElementsByClassName('gm-style')[0] as HTMLDivElement
  const domGmwrap = document.getElementById('gMap') as HTMLDivElement
  if(domGmstyle.offsetHeight === window.innerHeight 
    && domGmstyle.offsetWidth === window.innerWidth
  ){ // 全屏
    domGmwrap.style.position = 'fixed'
    this.chart.resize()
  }
})

五、参考

  1. Google Map API
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值