带有多个谷歌地图的引导转盘无法正常工作
Bootstrap carousel with multiple Google maps not working properly
我有两张谷歌地图作为引导转盘中的幻灯片。问题是只有初始激活的地图才能正常工作。所有其他的都不起作用。
我搜索过类似的问题,人们似乎建议使用一个函数来调整页面大小。但我对Javascript真的很陌生,不知道这对我的多个地图是如何工作的。我试了很多,但它总是坏掉。真的需要帮助。
我该怎么办?实际上我还有更多的幻灯片,但我觉得可能太多了,放不起来。
我的部分html在这里:
<div class="carousel" id="intro">
<ol class="carousel-indicators">
<li data-target="#intro" data-slide-to="0" class="active"></li>
<li data-target="#intro" data-slide-to="1"></li>
<li data-target="#intro" data-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<div class="item active">
<div class="carousel-content">
<div class="carousel-caption">
<h2>Spring Dawn at Su Causeway</h2>
<img src="img/su.jpg" />
<p>Su Shi, an outspoken official as well as a renowned painter, poet and art theorist, was made prefect of Hangzhou in 1089 during the Northern Song Dynasty. By that time, West Lake had shrunken to half its previous size due to increased land usage around the lake and was choked with weeds.</p>
<div id="sudi"></div>
</div>
</div>
</div>
<div class="item">
<div class="carousel-content">
<div class="carousel-caption">
<h2>Lotus in the Breeze at Crooked Courtyard</h2>
<img src="img/qu.jpg" />
<p>The imperial family of the Southern Song Dynasty kept their imperial brewery, Quyuan, close to the banks of West Lake in their capital city, Hangzhou. When the gentle summer breeze blew through lotuses kept in the lake near the brewery, it mixed with the smells of alcohol and was said to make even those not drinking feel intoxicated.</p>
<div id="quyuan"></div>
</div>
</div>
</div>
<div class="item">
<div class="carousel-content">
<div class="carousel-caption">
<h2>Melting Snow on Broken Bridge</h2>
<img src="img/duan.jpg" />
<P>In keeping with the seasonal theme, Lingering Snow on Broken Bridge takes in the view from the arched Broken Bridge, located at the eastern end of the Bai Causeway, the day after snow has fallen. To the northwest, the view takes in the snow-covered buildings and hill at Gu Shan while the rest of the lake stretches out in black contrast to the south, with the snowy white hills around it.</P>
<div id="duanqiao"></div>
</div>
</div>
</div>
</div><!-- carousel-inner -->
</div>
我的谷歌地图相关代码在这里:
function initMap() {
var mapOptions = {
sudi: {
center: {lat: 25.7823072, lng: -80.3011205},
zoom: 9,
mapTypeId: google.maps.MapTypeId.ROADMAP, // SATELLITE
mapTypeControl: false
},
quyuan: {
center: {lat: 26.1410956, lng: -80.2200135},
zoom: 9,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: false
},
duanqiao: {
center: {lat: 25.7823072, lng: -80.3011205},
zoom: 9,
mapTypeId: google.maps.MapTypeId.ROADMAP, // SATELLITE
mapTypeControl: false
},
}
var sudiMap = new google.maps.Map(document.getElementById("sudi"), mapOptions.sudi);
var quyuanMap = new google.maps.Map(document.getElementById("quyuan"), mapOptions.quyuan);
var duanqiaoMap = new google.maps.Map(document.getElementById("duanqiao"), mapOptions.duanqiao);
};
由于在初始化它们各自的地图时,所有其他幻灯片都不可见,因此谷歌地图实例无法获得正确的高度和宽度,因此无法正确初始化。当地图实例可见时,您需要触发调整其大小。您可以通过侦听slid.bs.carousel
事件,然后在相应的映射实例上触发resize事件来完成此操作。要获得正确的地图实例,您需要在幻灯片项目中创建对它的引用。这样做的一个好方法是将地图存储在带有关键点的对象中,并将关键点存储在相应幻灯片的数据属性中。
这里是html标记,注意data-map
属性:
<div id="carousel" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
<li data-target="#carousel-example-generic" data-slide-to="1"></li>
<li data-target="#carousel-example-generic" data-slide-to="2"></li>
</ol>
<div class="carousel-inner" role="listbox">
<div class="item active" data-map="foo">
<div id="foo" class="map"></div>
<div class="carousel-caption">
...
</div>
</div>
<div class="item" data-map="bar">
<div id="bar" class="map"></div>
<div class="carousel-caption">
...
</div>
</div>
</div>
<a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
在具有相应键的对象中创建地图:
var maps = {
foo: new google.maps.Map(document.getElementById('foo'), {
center: new google.maps.LatLng(44.5403, -78.5463),
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP
}),
bar: new google.maps.Map(document.getElementById('bar'), {
center: new google.maps.LatLng(44.5403, -78.5463),
zoom: 8,
mapTypeId: google.maps.MapTypeId.SATELLITE
})
};
现在您可以为slid.bs.carousel
事件添加一个监听器:
$('#carousel').on('slid.bs.carousel', function (e) {
// Fetch map from maps object by key from element's data attribute
var map = maps[e.relatedTarget.dataset.map];
// Trigger the resize
google.maps.event.trigger(map, 'resize');
});
Plunker示例:http://plnkr.co/edit/ROheU2vcGrreAMu3JbAV?p=preview
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- javascript扫雷器floodfill算法不能正常工作