Google Maps Javascript API V3 - 连续平移

时间:2011-09-20 23:45:04

标签: javascript google-maps event-handling

除非用户将鼠标移到地图上,否则我试图让谷歌地图连续平滑过度。使用'idle'事件处理程序会导致波动的平移动画。使用其他事件不会给我结果。我的initPan()函数的递归只会导致页面崩溃。 “空闲”连续平移方法here的示例。

function initialize() {
    var myOptions = {
        zoom: 5,
        center: markers.sanjose,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById('map_canvas'),
            myOptions);

    google.maps.event.addListener(map, 'idle', function() {
        initPan(map);
    });

    google.maps.event.addListener(map, 'mouseout', function() {
        stopPan(map);
    });
}

function initPan(map) {
   map.panBy(5, 0);
}

function stopPan(){
}

1 个答案:

答案 0 :(得分:5)

不是很多观点,没有评论,但如果有人遇到过这种情况,这是我的解决方案。

在用户事件(例如panBy())触发重复方法时,我遇到了API V3的问题。虽然V2有'moveend'事件,但它被'idle'事件取代。但是,在发生平移后,“空闲”有一个短暂的延迟。另一种选择是使用'bounds_changed'事件,但此事件每秒触发多次,导致地图永远不会加载切片(因此没有平移外观)。

我终于通过向'bounds_changed'添加超时延迟解决了这个问题,清除了多个事件触发器上的堆栈超时。这是解决问题的代码段。

google.maps.event.addListener(map, 'bounds_changed', function() {
  if (moving) {
    if (myTimeout) {
      window.clearTimeout(myTimeout);
    }
    myTimeout = window.setTimeout(initPan(map), 2200);
  }
});

我在API forum上找到了解决方案,您可以看到我的工作连续平移here的示例。如果这没有任何意义,请查看示例中的完整代码,祝你好运。