Уменьшить количество раз, когда событие запускается?[плохой / неправильный заголовок - измените, если у вас есть лучший] - PullRequest
0 голосов
/ 16 марта 2011
var time = null;
var bounds = null;
google.maps.event.addListener(map,'bounds_changed',function(){
    bounds = map.getBounds();
    time = (new Date()).getTime();
    setTimeout(function(){
        var now = ((new Date()).getTime() - 999);
        if(now > time){
            console.log('now: '+now+ ' then: '+time+ ' diff: '+(now-time));
            // here I want to fire an event exactly 1 time instead of a baizllion
            alert('I just want to see this once after the map was moved');
        }
    },1000);
});

В основном, когда карта меняется, bounds_changed, кажется, срабатывает довольно часто.Я думал, что если я объявлю время вне его, оно будет перезаписано.Может быть, не так?

1 Ответ

2 голосов
/ 16 марта 2011

Если вы только перетаскиваете карту, вы пробовали событие dragend ?

В противном случае, я думаю, что использование общего таймера является обычным способом преодоления этого. Возможно, у вас правильная идея, читая фрагмент кода.

Каждый триггер события bounds_changed сбрасывает таймер, когда время истекает, таймер запускает желаемую функцию. Вам просто нужно убрать таймер и поделиться им среди всех bounds_changed событий.

ссылка APIv3

Обновление

Вы можете попробовать:

    function fireEvent()
    {
        if (lastEvent.getTime() + 500 <= new Date().getTime())
        {
            //your event
        }
    }

    function DelayedCallback()
    {
        lastEvent = new Date();
        setTimeout(fireEvent, 500);
    }
event.addListener(map, "bounds_changed", DelayedCallback);

взято из здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...