Ton*_*bet 7 html javascript css google-maps
谷歌地图API显示第一个(时间)点击信息窗口的滚动条是一个众所周知的错误,
这个问题,第一次:

其余时间:

所以我发现添加maxWidth解决了问题,
对我来说,它没有; 如果我设置maxWidth为200px,滚动条消失,但它比我需要的小,

如果我设置250px(我需要的大小),滚动条仍然存在

知道我能尝试什么吗?
jsfiddle:http://jsfiddle.net/e0x20tvs/3/
$sescam_ventana = {
init: function() {
this.mapa();
},
mapa: function() {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = '//maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&callback=$sescam_ventana.mapSetup';
document.body.appendChild(script);
},
mapSetup: function() {
var styles = [
/*
{
stylers: [
{ saturation: -100 }
]
},{
featureType: "road",
elementType: "geometry",
stylers: [
{ visibility: "simplified" }
]
},{
featureType: "poi.business",
elementType: "labels",
stylers: [
{ visibility: "simplified" }
]
}
*/
];
var styledMap = new google.maps.StyledMapType(styles, {
name: "SESCAM"
}); //
var mapOptions = {
zoom: 16,
scrollwheel: false,
center: new google.maps.LatLng(39.6177074, 4.9725879),
mapTypeControlOptions: {
mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'map_style']
}
}
var handleMarkerClick = function(marker, index) {
var $navigationMenu = jQuery('<div>');
jQuery('.menu-item').each(function(i) {
var $button = jQuery('<button>');
$button.text(jQuery(this).text());
$button.addClass(jQuery(this).data('class'));
$navigationMenu.append($button);
});
if (typeof infowindow === 'undefined') {
infowindow = new google.maps.InfoWindow({
height: 380
});
}
var centro = infoCentros[index] //helpful data
infowindow.setContent(
'<div class="sescam-info-window">' +
'<h3>' + centro.nombre + '</h3>' +
'<p>' + centro.lugar + '</h3>' +
'<p class="titulo">Coordinador</p>' +
'<p><strong>' + centro.coordinador.nombre + '</strong></p>' +
'<p><a href="mailto:' + centro.coordinador.email + '">' + centro.coordinador.email + '</a></p>' +
'<p class="titulo">Responsable</p>' +
'<p><strong>' + centro.responsable.nombre + '</strong></p>' +
'<p><a href="mailto:' + centro.responsable.email + '">' + centro.responsable.email + '</a></p>' +
'<div class="menu">' + $navigationMenu.html() + '</div>' + '</div>'
);
infowindow.open(marker.getMap(), marker);
}
var handleMenu = function() {
jQuery('body').on('click', '.menu button', function() {
var itemClass = jQuery(this).attr('class');
jQuery('.listado.' + itemClass).stop(true, true).slideDown().siblings('.listado').stop(true, true).slideUp();
});
}
this.gmap = new google.maps.Map(document.getElementById('mapa'), mapOptions);
this.gmap.mapTypes.set('map_style', styledMap);
this.gmap.setMapTypeId('map_style');
this.mapMarkers = [];
this.mapInfoWindow = new google.maps.InfoWindow({
height: 380
});
jQuery(window).resize(function() {
$sescam_ventana.gmap.fitBounds($sescam_ventana.mapBounds);
});
for (var i = 0; i < this.mapMarkers.length; i++) {
// primero eliminamos todos los markers que pudiera haber de una visualización anterior
this.mapMarkers[i].setMap(null);
}
this.mapMarkers.length = 0; // reseteamos el array
this.mapBounds = new google.maps.LatLngBounds();
var c = 0; // de inicio no sabemos cuantos elementos tienen realmente latitud y longitud, este contador nos lo chivará
var latlon; // lo guardamos fuera del each para poder verlo después, si resulta que es el único elemeto a mostrar
for (var i = 0; i < infoCentros.length; i++) {
var centro = infoCentros[i];
var lat = centro.cordenadas.lat;
var lon = centro.cordenadas.long;
if (lat && lon) {
c++;
latlon = new google.maps.LatLng(lat, lon);
var moptions = {
position: latlon,
map: $sescam_ventana.gmap
}
moptions.icon = 'http://icons.iconarchive.com/icons/icons-land/vista-map-markers/256/Map-Marker-Marker-Outside-Pink-icon.png';
var marker = new google.maps.Marker(moptions);
$sescam_ventana.mapMarkers.push(marker);
//google.maps.event.addListener(marker, 'click', handleMarkerClick);
google.maps.event.addListener(marker, 'click', handleMarkerClick.bind(undefined, marker, i));
$sescam_ventana.mapBounds.extend(latlon);
}
}
if (c > 1) {
$sescam_ventana.gmap.fitBounds(this.mapBounds);
} else {
// si solo hay uno el fitbounds no hace un zoom ni un centrado correctos
$sescam_ventana.gmap.setCenter(latlon);
}
handleMenu();
}
}
jQuery(function() {
$sescam_ventana.init();
});Run Code Online (Sandbox Code Playgroud)
.gmapa {
position: relative;
padding-bottom: 50%;
}
#mapa {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="gmapa">
<script>
var infoCentros = [{
"nombre": "El nombre 0",
"texto": "Lorem ipsum sit met hamet amid0",
"lugar": "Toledo",
"coordinador": {
"nombre": "Ana M\u00aa del Mar Alonso Fern\u00e1ndez",
"email": "anapilar@gmail.com"
},
"responsable": {
"nombre": "Ana M\u00aa del Mar Alonso Fern\u00e1ndez",
"email": "anapilar@gmail.com"
},
"cordenadas": {
"lat": 39.150544196,
"long": -4.8019412125
}
}, {
"nombre": "El nombre 1",
"texto": "Lorem ipsum sit met hamet amid1",
"lugar": "Toledo",
"coordinador": {
"nombre": "Ana M\u00aa del Mar Alonso Fern\u00e1ndez",
"email": "anapilar@gmail.com"
},
"responsable": {
"nombre": "Ana M\u00aa del Mar Alonso Fern\u00e1ndez",
"email": "anapilar@gmail.com"
},
"cordenadas": {
"lat": 39.150544196,
"long": -4.7019412125
}
}, {
"nombre": "El nombre 2",
"texto": "Lorem ipsum sit met hamet amid2",
"lugar": "Toledo",
"coordinador": {
"nombre": "Ana M\u00aa del Mar Alonso Fern\u00e1ndez",
"email": "anapilar@gmail.com"
},
"responsable": {
"nombre": "Ana M\u00aa del Mar Alonso Fern\u00e1ndez",
"email": "anapilar@gmail.com"
},
"cordenadas": {
"lat": 39.150544196,
"long": -4.6019412125
}
}, {
"nombre": "El nombre 3",
"texto": "Lorem ipsum sit met hamet amid3",
"lugar": "Toledo",
"coordinador": {
"nombre": "Ana M\u00aa del Mar Alonso Fern\u00e1ndez",
"email": "anapilar@gmail.com"
},
"responsable": {
"nombre": "Ana M\u00aa del Mar Alonso Fern\u00e1ndez",
"email": "anapilar@gmail.com"
},
"cordenadas": {
"lat": 39.150544196,
"long": -4.5019412125
}
}, {
"nombre": "El nombre 4",
"texto": "Lorem ipsum sit met hamet amid4",
"lugar": "Toledo",
"coordinador": {
"nombre": "Ana M\u00aa del Mar Alonso Fern\u00e1ndez",
"email": "anapilar@gmail.com"
},
"responsable": {
"nombre": "Ana M\u00aa del Mar Alonso Fern\u00e1ndez",
"email": "anapilar@gmail.com"
},
"cordenadas": {
"lat": 39.150544196,
"long": -4.4019412125
}
}];
</script>
<div id="mapa"></div>
</div>Run Code Online (Sandbox Code Playgroud)
编辑
在您的特定情况下,它与 Roboto 网络字体有关。它包含在 Google Maps API 中,但在打开 InfoWindow 之前您的页面上没有任何内容使用它,因此浏览器没有理由下载它,也没有。
但是,当您打开 infoWindow 时,此时的浏览器意识到它需要字体,并开始下载它,但谷歌地图在下载字体之前已经测量了 infoWindow 大小(请参阅有关 google maps api 如何测量的原始答案) infoWindow 的大小)。字体下载完成后,infoWindow 中的内容会以 Roboto 字体重新绘制,这实际上使 infoWindow 的大小与 Google 在下载字体之前测量的大小不同(更大),并且在此点你会看到滚动条。
这也解释了为什么您第一次看到滚动条——当谷歌地图在字体下载之前测量信息窗口时——但之后你不会看到它们——因为字体已经下载,谷歌地图现在采取的任何测量都将是正确的.
所以,解决办法是
a)在打开第一个 infoWindow 或
b)为您的 infoWindow 内容使用不同的字体(一种在页面其他地方使用的字体,因此在页面加载时下载)。
我会留下我的其余答案,因为这是对 infoWindows 工作方式的常见误解,而且,正如您在谷歌搜索中指出的那样,很多人都挂断了它。
域名注册地址:
切勿使用父选择器(例如 #map-canvas)来设置 infoWindow 的 HTML 内容样式。
这不是一个错误。以下是谷歌地图信息窗口样式的工作原理:
当你告诉谷歌地图 API 你想打开一个包含 HTML 内容的信息窗口时,谷歌动态创建一个 div 元素,将它附加到你的 body 标签,获取动态创建的 div 的测量值,然后将带有这些测量值的 div 附加到地图这是您的信息窗口。
这就是诀窍发挥作用的地方。
假设这是您的 HTML:
<div id="map-canvas">
</div>
Run Code Online (Sandbox Code Playgroud)
这是您的 infoWindow 内容:
<h1>I'm an infoWindow</h1>
<p>Hi there!</p>
Run Code Online (Sandbox Code Playgroud)
这是你的 CSS:
h1 { font-size: 18px; }
#map-canvas h1 { font-size: 24px; }
Run Code Online (Sandbox Code Playgroud)
Google 几乎总是会错误地绘制此 infoWindow - 因为当它动态创建 infoWindow div 并将其附加到正文以获取测量值时,该 div 的h1字体大小将为18px。所以现在谷歌有测量值并将这个 div 放在地图上,此时h1字体大小增加到24px所以现在谷歌使用了错误的测量值,你的 infoWindow 最终会有滚动条。
我一直发现使用 infoWindow CSS 的最简单方法是使用包装 div 并始终以它为目标,因此您的 infoWindow HTML 内容将如下所示:
<div class="info-window-content">
<h1>I'm an infoWindow</h1>
<p>Hi there!</p>
</div>
Run Code Online (Sandbox Code Playgroud)
然后你的 CSS 可能看起来像:
/* global styles */
h1 { font-size: 18px; }
p { line-height: 1.6; }
/* info window styles */
.info-window-content h1 { font-size: 24px; }
.info-window-content p { line-height: 1.2; }
Run Code Online (Sandbox Code Playgroud)
并且您的信息窗口中不会出现滚动条。
| 归档时间: |
|
| 查看次数: |
1513 次 |
| 最近记录: |