现在,我正在为一个客户的网站开发“位置”页面,该页面将他们四个位置的名称显示为链接。链接列表下面是谷歌地图画布,其中为每个位置添加了标记和信息窗口。加载时,地图默认为第一个位置标记的位置,并且应该打开该标记的infoWindow。单击位置名称应该平移地图到相应的标记,并打开infoWindow。
我使用的谷歌地图示例非常准确-http://wrightshq.com/playground/placing-multiple-markers-on-a-google-map-using-api-3/ 我已经把地图注释掉了;线和整个边界都在下面。代替监听器,我添加了map.panTo()以转到第一个标记的位置,并在mapOptions中添加了zoom:14。以下是我的全部代码:
function initialize() {
var map;
var bounds = new google.maps.LatLngBounds();
// Define some styles for the colors/look.
// Generate styles here: http://gmaps-samples-v3.googlecode.com/svn/trunk/styledmaps/wizard/index.html
var styles = [ { "featureType": "landscape.man_made", "elementType": "geometry", "stylers": [ { "color": "#abce80" } ] },{ "featureType": "landscape.natural", "elementType": "geometry", "stylers": [ { "color": "#749f71" } ] },{ "featureType": "road", "elementType": "geometry", "stylers": [ { "color": "#99c26e" }, { "weight": 0.6 } ] },{ "featureType": "road.highway", "elementType": "geometry", "stylers": [ { "color": "#eaf5a1" }, { "weight": 1.5 } ] },{ "featureType": "road", "elementType": "labels.text.fill", "stylers": [ { "color": "#5b5b3e" } ] },{ "featureType": "road", "elementType": "labels.text.stroke", "stylers": [ { "color": "#a9d07f" } ] },{ "featureType": "poi", "elementType": "labels.text.stroke", "stylers": [ { "color": "#f5ffa8" } ] },{ "featureType": "water", "elementType": "geometry", "stylers": [ { "color": "#aee3e0" } ] },{ "featureType": "poi", "elementType": "geometry", "stylers": [ { "color": "#806e4e" }, { "lightness": 27 } ] },{ } ];
var mapOptions = {
mapTypeId: 'roadmap',
styles: styles,
zoom:14
};
// Display a map on the page
map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
// Multiple Markers
var markers = [
<?php if( get_field('locations') ): ?>
<?php while( has_sub_field('locations') ): $map_info = get_sub_field('map_location'); ?>
['<?php echo $map_info['address'] ?>',<?php echo $map_info['lat'] ?>,<?php echo $map_info['lng'] ?>],
<?php endwhile; ?>
<?php endif; ?>
];
mapCenter = new google.maps.LatLng(markers[0][1],markers[0][2]);
//console.log(mapCenter);
// Info Window Content
var infoWindowContent = [
<?php if( get_field('locations') ): ?>
<?php while( has_sub_field('locations') ): ?>
['<div class="google-map-tooltip">' +
'<strong><?php echo get_sub_field('pin_heading'); ?></strong>' +
'<p><?php echo str_replace('<br />','<br />\\',get_sub_field('address')); ?></p>' +
'</div>'],
<?php endwhile; ?>
<?php endif; ?>
];
// Display multiple markers on a map
var infoWindow = new google.maps.InfoWindow(), marker, i;
// Loop through our array of markers & place each one on the map
for( i = 0; i < markers.length; i++ ) {
var position = new google.maps.LatLng(markers[i][1], markers[i][2]);
bounds.extend(position);
marker = new google.maps.Marker({
position: position,
map: map,
title: markers[i][0],
icon: '<?php echo IMAGES; ?>/icon-map-marker.png',
});
if( i==0 ){ first_marker = marker; }
// Allow each marker to have an info window
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infoWindow.setContent(infoWindowContent[i][0]);
infoWindow.open(map, marker);
}
})(marker, i));
// Automatically center the map fitting all markers on the screen
//map.fitBounds(bounds);
}
//Move map to first tab's location
map.panTo(mapCenter);
console.log(first_marker);
infoWindow.open(map,first_marker);
// Override our map zoom level once our fitBounds function runs (Make sure it only runs once)
/*var boundsListener = google.maps.event.addListener((map), 'bounds_changed', function(event) {
this.setZoom(14);
google.maps.event.removeListener(boundsListener);
});*/
}//END initialize()
google.maps.event.addDomListener(window, 'load', initialize);
代码的工作原理是添加标记,并且贴图从正确的标记开始。如果单击标记,将显示正确的信息窗口。然而,我希望发生的是,不仅地图从第一个标记位置开始,而且还需要打开标记信息窗口。正如您在该示例代码中所注意到的,问题在于,在标记的click listener中调用infoWindow.setContent()之前,infoWindow内容永远不会被设置。换句话说,在单击信息窗口之前,它们实际上没有任何内容。因此,当我尝试在地图第一次显示时在第一个标记上使用infoWindow.open()时,它从技术上打开了infoWindow,但您只看到工具提示点,而没有工具提示气泡的其余部分,因为内容还没有通过单击事件添加。
在将标记声明为新的标记对象后,我通过将此行添加到for循环中来确定第一个标记:
if( i==0 ){ first_marker = marker; }
这就是我如何知道在添加标记后在哪里使用panTo()地图,但是我不知道如何使用setContent()向这个标记添加infoBox,如果这是我需要解决的问题的话。有人能帮我在第一个标记上获得infoBox的内容集,然后打开infoBox作为地图的“打开状态”吗?
可能的选择
在infoWindow.open()之前设置内容
infoWindow.setContent(infoWindowContent[0][0]);
infoWindow.open(map,first_marker);
触发点击标记:
google.maps.event.trigger(first_marker,'click');
设置选项:
infoWindow.setOptions({
content:infoWindowContent[0][0],
map:map,
position:first_marker.getPosition()
});
我正在使用Selenium2.20WebDriver用C#创建和管理一个firefox浏览器。要访问页面,我使用以下代码,在访问URL之前设置驱动超时: 问题是,有时加载页面需要花费很长时间,使用selenium WebDriver加载页面的默认超时时间似乎是30秒,这太长了。并且我认为我设置的超时不适用于使用GoToUrl()方法加载页面。 所以我试图弄清楚如何设置页面加载的超时,然而,我找不到
我试图在一个网站上获得一个内容列表(若有人感兴趣的话,这一个)。布局最近发生了变化,现在他们不会一次加载所有内容,而是使用magic(可能是js)。我目前正在使用JSoup分析HTML,但我愿意接受建议。 这就是我得到的: 实现此目的的代码: 这是我想看到的(复制从检查元素后,页面加载了所有的内容): 谷歌帮不了什么忙,因为与微调器等相关的所有内容都与javascript有关。 解决方案: 由于J
当你使用webpack时,有什么方法可以阻止加载所有的语言环境(我只需要英语)?我在看源代码,似乎如果定义了,它是为webpack定义的,那么它总是试图每个区域设置。我很确定这需要一个拉请求来修复。但有什么办法,我们可以修复这个与webpack配置? 这是我加载momentjs的网页配置: 然后,无论我在哪里需要它,我都只需要。这是可行的,但它会将大约250 kB不需要的语言文件添加到我的包中。我
本文向大家介绍如何使用jQuery设置元素的HTML内容?,包括了如何使用jQuery设置元素的HTML内容?的使用技巧和注意事项,需要的朋友参考一下 要设置元素的HTML内容,请使用方法。您可以尝试运行以下代码以使用jQuery获取元素的HTML内容- 示例 现场演示
我的大摇大摆的ui显示“参数内容类型”,其中包含各种条目:、、和。 我只想要。 在repo上有一个类似的未解决的问题,它使用了这个可视化(旧的ui,但相同的想法): 版本 版本
问题内容: 我正在尝试将MutationObserver设置为在加载时观察页面突变。 为此,应在页面加载之前配置MutationObserver。 使用selenium-chromedriver,找不到为此目的注入JS的方法。 我知道chrome扩展程序可以做到这一点,但扩展程序无法在无头模式下工作。 那就是问题所在。 问题答案: 通过调用DevTool API可以实现