首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google v3,jQuery用户界面标签,地图不调整大小

Google v3,jQuery用户界面标签,地图不调整大小
EN

Stack Overflow用户
提问于 2011-06-23 14:17:43
回答 5查看 13.5K关注 0票数 2

我正在使用Google v3,显示在jQuery UI选项卡上。当显示地图的选项卡被选中时,我一直在努力触发我的google地图来正确调整大小。这里的jQuery文档http://docs.jquery.com/UI/Tabs提供了以下内容:

对于Google地图,一旦标签显示如下,您也可以调整地图的大小: $(‘#样例’).bind(‘tabsshow’,函数(事件,ui) { if (ui.panel.id == "map-tab") { resizeMap();});

无论我尝试什么,上面的代码都不会对我起作用。

下面的代码可以在我选择制表符9时显示一个警报。因此,我知道至少我正确地隔离了正确的触发事件。以下是代码:

代码语言:javascript
复制
$(function() {
    $( "#tabs" ).bind( "tabsselect", function(event, ui) { 
        if (ui.panel.id == "tabs-9") {
            alert("Alert is working");
        }                                         
    });
});

当我修改这段代码以包含推荐的resizeMap();命令时,它无法工作。相反,它所做的是将字符“# tab - 9”附加到url的末尾,然后它甚至没有选择正确的选项卡9。当我使用以下代码时,我甚至看不到标签9:

代码语言:javascript
复制
$(function() {
    $( "#tabs" ).bind( "tabsselect", function(event, ui) { 
        if (ui.panel.id == "tabs-9") {
            resizeMap();
        }                                         
    });
});

最后,当我修改代码以包含一个不同的调整大小命令"google.maps.event.trigger(map,‘resize’)“时,它仍然不能工作。相反,它确实允许我选择正确的选项卡9,它不像上面的情况那样将字符附加到URL的末尾,但是它不会调整地图的大小。地图仍然只显示部分完整,并在右边有灰色地带。以下是代码:

代码语言:javascript
复制
$(function() {
    $( "#tabs" ).bind( "tabsselect", function(event, ui) { 
        if (ui.panel.id == "tabs-9") {
           google.maps.event.trigger(map, 'resize');
        }                                         
    });
});

有什么我可以尝试的吗?我很困惑。谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-23 14:36:40

将以下内容添加到选项卡构造函数中:

代码语言:javascript
复制
$(function() {
    $("#myTabs").tabs({
        show: function(e, ui) {
            if (ui.index == 0) {
                google.maps.event.trigger(myMap, "resize");
            }
        }
    });
});

您应该测试ui.index,以确定包含Google地图的面板的基于0的索引,当然还应该更新对myMap#myTabs的引用。

有关分配调整大小事件触发器的详细信息,请参阅地图对象文档的Events部分。

票数 12
EN

Stack Overflow用户

发布于 2011-07-29 07:45:05

我知道这个话题很古老,但我认为这可能对某些人有用。

为了避免在其中一些选项卡上呈现jQuery UI tabs和Google的问题,您可以执行以下操作:

代码语言:javascript
复制
//global variables
var gMapsCentralLocation;   //some initial map center location
var mapCenter;              //we will use this to overide your initialy map center so we can "remember" initial viewport when we go back and forth trought tabs
var mapCenterFlag = false;  //indicate if we need to use new google maps viewpoint center, or use initial.
var map;                    //google map

$(document).ready(function () {
    $('#YourTabs').tabs({
        show: function (event, ui) {
            switch (ui.tab.hash) {
                case "#GoogleMapsTab":
                    {
                        preRenderGoogleMaps();
                    }
                    break;
                default:
                    {
                        //to save previous map center when user select some other tab
                        if (map) {
                            mapCenter = map.getCenter();
                        }
                    }
                    break;
            }
        }
    });
    drawRegionOnMap();
});

function preRenderGoogleMaps(){
    //fix rendering issues
    google.maps.event.trigger(map, 'resize');

    if (!mapCenterFlag) {
        map.setCenter(gMapsCentralLocation);
        mapCenterFlag = true;
    } else {
        map.setCenter(mapCenter);
    }
}

function drawRegionOnMap() {
    map = null;    

    var gMapsOptions = {
        zoom: 8,
        center: gMapsCentralLocation,
        //POSSIBLE MAP TYPES (ROADMAP, SATELLITE, HYBRID, TERRAIN)
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    map = new google.maps.Map(document.getElementById("map_canvas"), gMapsOptions);
}
票数 4
EN

Stack Overflow用户

发布于 2012-10-25 11:41:52

我设法解决了这个问题,在显示map选项卡时初始化了地图,还编辑了一些css ( css很可能是主题相关的问题)。

代码语言:javascript
复制
/* Initialise jQuery UI Tabs */
jQuery(function() {
    jQuery( "#tabs" ).tabs({
      fx: {
        opacity: 'toggle',
        duration: 300
      }
    });
});

/* Redraw the Google Map everytime tab-4 is shown/clicked */
jQuery(function() {
            jQuery( "#tabs" ).bind( "tabsshow", function(event, ui) { 
                if (ui.panel.id == "tabs-4") {
                    var mapOptions = {
                      center: myLatlng,
                      zoom: 13,
                      mapTypeId: google.maps.MapTypeId.ROADMAP
                    };
                    var map = new google.maps.Map(document.getElementById("map"), mapOptions);
                }                                         
            });
});

然后添加一些CSS来修复地图控件,如果它们不合适,等等。

代码语言:javascript
复制
#map img { max-width:none; }

如果所有图像的最大宽度设置为100%,则会出现问题.

希望这能有所帮助!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6455536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档