如何使用 Google Maps API v3.0 强制重绘? [英] How do I force redraw with Google Maps API v3.0?

查看:21
本文介绍了如何使用 Google Maps API v3.0 强制重绘?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个相当复杂的地图应用程序,可以处理多个自定义标记等.我有一个名为 resizeWindow 的函数,每当屏幕更改时,我都会在侦听器中调用该函数,地图通过计算新边界并强制调整大小来重绘自身.它看起来像这样:

I have a fairly sophisticated Maps application that handles multiple custom markers and such. I have a function called resizeWindow that I call in a listener to that whenever the screen is changed, the map redraws itself by calculating new bounds and forcing a resize. It looks like this:

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

当我实际调整窗口大小时,这很有效.但是...

and this works great when I actually resize the window. But...

我在窗口右侧有一个菜单.我使用 jquery.animate 将该菜单移出屏幕.我将 fitmap 函数称为一个步骤过程(或仅在最后一次),它不会重绘地图.

I have a menu going down the right side of the window. I use jquery.animate to move that menu off the screen. I call the fitmap function as a step process (or just once at the end) and it will not redraw the map.

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

我已经阅读并阅读了这个,似乎谷歌地图 API v3.0 有一个奇怪的地方,如果没有实际改变,重绘就不会发生.在这种情况下,我的可用窗口确实从屏幕宽度 - 菜单更改为实际全屏.但是没有发生重绘.

I have read and read on this and it seems that there is an oddity of Google Maps API v3.0 that redrawing will not happen if nothing actually changes. In this case, my available window does change from screen width - menu to actual full screen. But no redraw happens.

我试过 google.maps.event.trigger(map, 'resize');这也不起作用.

I've tried google.maps.event.trigger(map, 'resize'); and that doesn't work either.

有没有办法绝对强制谷歌地图重绘?

Is there a way to absolutely force Google Maps to redraw?

推荐答案

google.maps.event.trigger(MapInstance,'resize') 对我来说很好用,把它放在函数 fitMap .

google.maps.event.trigger(MapInstance,'resize') is working fine for me, put it at the begin of the function fitMap .

您缺少什么:

当前(不在上面发布的代码中,在您的实时代码中),您在每个 step 上调用 resizeWindow .

currently(not in the code posted above, in your live-code), you call resizeWindow on each step .

当您在 step 调用此函数时,该函数将在 before 当前步骤的动画完成之前调用.结果是在完整的动画完成后不会调用 resizeWindow ,会出现例如地图右侧的空白处.

When you call this function on step the function will be called before the animation for the current step has finished. The result is that resizeWindow will not be called when the complete animation has been finished, there will be e.g. a margin on the right side of the map.

解决方案:在动画complete回调上也调用resizeWindow.

Solution: call resizeWindow also on the complete-callback of the animation.

这篇关于如何使用 Google Maps API v3.0 强制重绘?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆