设置超时以减慢zoom_changed事件的速度

时间:2013-07-02 13:33:56

标签: javascript google-maps zoom

我有以下代码:

    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() } } );
    }

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

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

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

怎么做?

TIA

1 个答案:

答案 0 :(得分: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() } } );
}