Google Maps API v3,jQuery UI标签,地图未resize
我正在使用Google Maps API v3,显示在jQuery UI标签上。 当选择显示地图的选项卡时,我一直在努力触发我的谷歌地图以正确resize。 这里的jQuery文档http://docs.jquery.com/UI/Tabs提供了:
对于Google地图,您还可以在选项卡显示后调整地图大小,如下所示:
$('#example').bind('tabsshow', function(event, ui) { if (ui.panel.id == "map-tab") { resizeMap(); } });
无论我尝试什么,上面的代码都不适合我。
以下代码可以正常工作,因为当我选择tab 9时它会显示警告。因此,我知道至少我正确地隔离了正确的触发事件。 这是代码:
$(function() { $( "#tabs" ).bind( "tabsselect", function(event, ui) { if (ui.panel.id == "tabs-9") { alert("Alert is working"); } }); });
当我改变这段代码以包含推荐的resizeMap(); 命令,它不起作用。 相反,它所做的是将字符“#tabs-9”附加到url的末尾,然后它甚至不会选择正确的选项卡9.当我使用此代码时,我甚至看不到选项卡9:
$(function() { $( "#tabs" ).bind( "tabsselect", function(event, ui) { if (ui.panel.id == "tabs-9") { resizeMap(); } }); });
最后,当我改变代码以包含不同的resize命令“google.maps.event.trigger(map,’resize’);”时,它仍然不起作用。 相反,它允许我选择正确的选项卡9,并且它不会像上面的情况那样将字符附加到URL的末尾,但它不会调整地图的大小。 地图仍然只显示部分完整,右侧有灰色条带。 这是代码:
$(function() { $( "#tabs" ).bind( "tabsselect", function(event, ui) { if (ui.panel.id == "tabs-9") { google.maps.event.trigger(map, 'resize'); } }); });
我接下来可以尝试的任何想法? 我很难过。 谢谢。
将以下内容添加到选项卡构造函数中:
$(function() { $("#myTabs").tabs({ show: function(e, ui) { if (ui.index == 0) { google.maps.event.trigger(myMap, "resize"); } } }); });
您应该测试ui.index
以获取包含您的Google地图的面板的从0开始的索引,当然myMap
更新对myMap
和#myTabs
引用。
有关调度resize事件触发器的更多信息,请参阅Map对象文档的Events部分。
我知道这个话题很古老,但认为这可能对某人有用。
为了避免在某些选项卡上呈现jQuery UI选项卡和Google地图的问题,您可以执行以下操作:
//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); }
我设法通过在显示地图选项卡时初始化地图并通过编辑一些css来解决这个问题(css很可能是与主题相关的问题)。
/* 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来修复地图控件,如果它们不合适等。
#map img { max-width:none; }
如果所有图像的最大宽度设置为100%,您将遇到问题。
希望这可以帮助!
首先,转到放置选项卡模板的文件,搜索加载地图选项卡的
标记并将其放入:
并在地图脚本之后
google.maps.event.addDomListener(window, 'load', initialize);
把这个:
function reloadmap(){ //when you resize the map, you lose your zoom and your center //so you need to get them again here z = map.getZoom(); c = map.getCenter(); google.maps.event.trigger(map, 'resize'); //and set them again here map.setZoom(z); map.setCenter(c); }
我只用css解决了
map-tab {width:100%; 身高:300px;浮动:左; display:block!important ; margin:0px; 填充:0px;}
然后隐藏隐藏的标签:
div [aria-hidden =“true”] {position:absolute!important; 左:-9999999px;}}