You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测Google Maps地图是否处于移动状态?

如何持续检测Google Maps地图是否处于移动状态?

我需要实时检测Google Maps的移动状态,覆盖按住鼠标拖动和松开后的惯性滑动全阶段。但目前的方案存在检测空白期:用drag事件搭配一次性idle事件时,加速拖动松开后,从dragend触发到idle触发的这段惯性滑动时间里,无法检测到地图移动,导致标记点位置更新中断。

试过的不理想方案

  1. 事件组合方案:尝试bounds_changed、center_changed事件,但根据Google Maps官方事件说明,这些事件在地图惯性滑动阶段不会持续触发,无法覆盖全阶段。
  2. 定时器补全方案:用drag触发时启动逻辑,dragend后用定时器轮询,idle时清除定时器,但效果不够流畅,代码如下:
this.changeListener = google.maps.event.addListener(this.map, 'drag', () => {
      let timer;
      this.bubbleHeading();
      google.maps.event.addListenerOnce(this.map, 'dragend', () => {
        timer = setInterval(() => this.bubbleHeading(), 10);
      });
      google.maps.event.addListenerOnce(this.map, 'idle', () => {
        clearInterval(timer);
      });
    });

可行的解决方案:利用OverlayProjection获取实时可视区域

最终通过弃用getBounds()和getCenter()这类依赖事件触发更新的方法,改用Overlay的投影对象获取实时可视区域,实现了全程流畅的标记点更新:

  1. 借助自定义Overlay或现有Overlay实例,调用overlay.getProjection().getVisibleRegion()
  2. 该方法返回的可视区域数值会在地图惯性滑动阶段持续实时更新,无需依赖事件触发
  3. 基于这个实时更新的可视区域计算标记点位置,即可覆盖拖动、惯性滑动的所有移动阶段

效果差异

  • 原方案:惯性滑动阶段标记点停止更新,直到地图完全静止
  • 新方案:无论拖动还是惯性滑动,标记点全程实时更新,无中断

内容的提问来源于stack exchange,提问作者Michał B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:42:39