Подтвердить что ты не робот

Как принудительно перерисовать с помощью API Карт Google версии 3.0?

У меня довольно сложное приложение Maps, которое обрабатывает несколько настраиваемых маркеров и т.д. У меня есть функция, называемая resizeWindow, которую я вызываю в слушателе, чтобы при каждом изменении экрана карта перерисовывала себя, вычисляя новые границы и заставляя изменять размер. Это выглядит так:

window.onresize = function(event) { fitmap(); };

и функция изменения размера:

function fitmap(id) {
    var coords = [];
    var newlatlng = new google.maps.LatLng(projlat, projlng);
    coords.push(newlatlng);

        for (var i=0; i<markers[id].length; i++) {
            newlatlng = new google.maps.LatLng(markers[id][i].latitude, markers[id][i].longitude);
            coords.push(newlatlng);
        }
    }   

    var bounds = new google.maps.LatLngBounds ();
    for (var i = 0, LtLgLen = coords.length; i < LtLgLen; i++) {
        bounds.extend (coords[i]);
    }
    map.fitBounds(bounds);

и это отлично работает, когда я фактически изменяю размер окна. Но...

У меня есть меню, идущее вниз в правой части окна. Я использую jquery.animate для перемещения этого меню с экрана. Я называю функцию fitmap в качестве шагового процесса (или только один раз в конце), и он не будет перерисовывать карту.

$('#rightSide').animate({ right:"-240px" }, { 
    duration:1000, 
    step: function(now,fx) {
        fitmap();
    } 
});

Я читал и читал об этом, и кажется, что есть странность Google Maps API версии 3.0, что перерисовка не произойдет, если ничего не изменится. В этом случае мое доступное окно меняется с экрана ширины - меню на фактический полный экран. Но перерисовывания не происходит.

Я пробовал google.maps.event.trigger(map, 'resize'); и это тоже не работает.

Есть ли способ полностью перерисовать карты Google?

4b9b3361

Ответ 1

google.maps.event.trigger(MapInstance,'resize') отлично работает для меня, поставьте его в начале функции fitMap.

Что вам не хватает:

в настоящее время (не в коде, указанном выше, в вашем живом коде), вы вызываете resizeWindow на каждом step.

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

Решение: вызовите resizeWindow также на complete -callback animation.