Google Maps API V3 - 将多个事件添加到单个地图

时间:2017-08-16 19:31:07

标签: google-maps google-maps-api-3

我有以下代码可以正常工作:

google.maps.event.addListener(map, 'dragend', function() {
    bounds = map.getBounds();
    var ne = bounds.getNorthEast(); // LatLng of the north-east corner
    var sw = bounds.getSouthWest(); // LatLng of the south-west corder
    $.when( removeMarkers() ).then( setMarkers(city, state, ne, sw) );
});

我想要的是当两个事件中的任何一个发生时,运行此代码。我想要的两个事件是'dragend'和'zoom_changed'。我已经尝试了'空闲'事件,它减慢了地图的速度,我发生了一些我不喜欢的事情。它只会带来糟糕的用户体验。然而,'dragend'和'zoom_changed'事件都很好地分离,我只是没有找到一种方法来组合它们。基本上我希望代码在有人平移地图或放大或缩小时运行。

我已经尝试过这段代码,我得到一个错误,上面写着'bounds is null',它指向'zoom_changed'事件行正下方的'bounds'的第二个实例:

google.maps.event.addListener(map, 'dragend', function() {
    bounds = map.getBounds();
    var ne = bounds.getNorthEast(); // LatLng of the north-east corner
    var sw = bounds.getSouthWest(); // LatLng of the south-west corder
    $.when( removeMarkers() ).then( setMarkers(city, state, ne, sw) );
});
google.maps.event.addListener(map, 'zoom_changed', function() {
    bounds = map.getBounds();
    var ne = bounds.getNorthEast(); // LatLng of the north-east corner
    var sw = bounds.getSouthWest(); // LatLng of the south-west corder
    $.when( removeMarkers() ).then( setMarkers(city, state, ne, sw) );
 });

1 个答案:

答案 0 :(得分:0)

如果要在响应多个事件时运行完全相同的代码,请将其放在命名函数中,并将该函数用作两个事件的事件侦听器。

另外,为什么您将$.when().then()用于removeMarkers()功能?这是异步功能吗?这将是相当不寻常的。删除某些标记的函数的任何典型实现都是普通的同步代码。

所以你可以写这样的代码:

function updateMarkers() {
    bounds = map.getBounds();
    var ne = bounds.getNorthEast();
    var sw = bounds.getSouthWest();
    removeMarkers();
    setMarkers( city, state, ne, sw );
}

google.maps.event.addListener( map, 'dragend', updateMarkers );
google.maps.event.addListener( map, 'zoom_changed', upateMarkers );

说完这一切之后,我不知道会导致你遇到的错误是什么。您需要发布一个可运行的测试用例来演示此问题,无论是在此处的片段还是在小提琴中。