2

我有以下代码:

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

    function updateBounds() {
      bounds = map.getBounds();
      $.ajax({ url:url, params:{ b:bounds.toUrlValue() } } );
    }

因此,在每次移动/缩放时,坐标都会发送到服务器。

问题是,如果用户通过“2-click”滚动来更改缩放级别,则会触发 2 个事件并且服务器必须进行双重工作。

我希望客户“忘记”第一个缩放事件并只发送最后一个。

怎么做?

TIA

4

1 回答 1

2

您可以按照您的标题建议做...为每个缩放事件设置一个超时,然后如果在超时完成之前还有另一个缩放事件,则清除它并重置它,可能像这样:

google.maps.event.addListener( map, 'dragend', updateBounds );
google.maps.event.addListener( map, 'zoom_changed', updateDebounce );

var debounceTimeout;
function updateDebounce() {
     window.clearTimeout(debounceTimeout);
     debounceTimeout = window.setTimeout(updateBounds, 1000);
}

function updateBounds() {
  bounds = map.getBounds();
  $.ajax({ url:url, params:{ b:bounds.toUrlValue() } } );
}
于 2013-07-02T14:55:27.147 回答