[英]Bootstrap accordion doesn't always collapse on Google Maps listener event
僅當指針懸停在Google地圖上時,如何使Bootstrap手風琴顯示(即,平滑地“展開”自身),而當離開地圖時,如何隱藏(即,平滑地“折疊”自身)?
我將.collapse('show')
附加到mousemove
事件,並將.collapse('hide')
到mouseout
,但這僅在指針緩慢進入或退出地圖時才起作用。 當運動迅速時(例如在地圖上快速滑動),手風琴將保持大約50%的時間顯示。
這是完整的代碼,顯示了我的意思:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js"></script>
<style>
#map-canvas {
width: 500px;
height: 400px;
}
</style>
<script>
function initialize() {
var mapCanvas = document.getElementById('map-canvas');
var mapOptions = {
center: new google.maps.LatLng(45.816175, 15.966154),
zoom: 17
}
var map = new google.maps.Map(mapCanvas, mapOptions);
google.maps.event.addListener(map, 'mousemove', function(){
$('#acc').collapse('show');
});
google.maps.event.addListener(map, 'mouseout', function(){
$('#acc').collapse('hide');
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map-canvas"></div>
<div id="acc" class="accordion-body collapse">
<div class="accordion-inner">
<h1>aaaaaaaaaaaaaaaaaaaaaaaa</h1>
</div>
</div>
</body>
</html>
有兩個問題:
您沒有使用適當的事件。 每當您在地圖上移動鼠標時, mousemove
觸發,而當您將鼠標懸停在地圖控件或google-logo / copyrights上時, mouseout
也將觸發。 你最好使用mouseenter
/ mouseleave
地圖容器的-events
當快速將鼠標移入和移出時,過渡之間會發生沖突,因此在另一個動畫仍在運行時,您將開始一個新的動畫。 我沒有找到使用引導程序停止正在運行的動畫的選項,因此我建議改用jQuery的slideUp
/ slideDown
。 效果將相同,但是jQuery有一種方法可以停止正在運行的動畫: $.stop()
實施變更:
1)刪除Bootstrap手風琴類,因為似乎沒有一種方法可以停止滾動/展開動畫(請注意,最初使用display:none
樣式隱藏了內容):
<div id="acc" style="display: none;">
<h1>aaaaaaaaaaaaaaaaaaaaaaaa</h1>
</div>
2)用任一替換“展開”事件處理程序,
google.maps.event.addDomListener(map.getDiv(), 'mouseenter', function(){
$('#acc').stop().slideDown('slow');
});
要么
google.maps.event.addListener(map, 'mouseover', function(){
$('#acc').stop().slideDown('slow');
});
3)將“匯總”事件處理程序替換為:
google.maps.event.addDomListener(map.getDiv(), 'mouseleave', function(){
$('#acc').stop().slideUp('slow');
});
這種基於JQuery的方法在鼠標快速移動的情況下似乎可以更順暢地工作。
$( "#map-canvas" ).hover(
function() {
$('#acc').show();
}, function() {
$('#acc').hide();
});
Javascript.info說:“當瀏覽器內部計時允許時,Mousemove和mouseover / mouseout觸發。” 也許這與效率有關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.