Javascript 谷歌地图API V3-元素点击-中心地图/打开信息窗口

Javascript 谷歌地图API V3-元素点击-中心地图/打开信息窗口,javascript,wordpress,google-maps,google-maps-api-3,Javascript,Wordpress,Google Maps,Google Maps Api 3,我最近一直在玩谷歌地图API,我有执行JS功能的链接。这个JS函数部分起作用,单击它可以将地图居中到pin坐标,但我也希望它显示infowindow;除了打开信息窗口,其他一切都正常。任何帮助都将是惊人的!代码中的PHP/WP函数有点杂乱 <script type="text/javascript"> var map; var infowindow; var marker; function initialize() { v

我最近一直在玩谷歌地图API,我有执行JS功能的链接。这个JS函数部分起作用,单击它可以将地图居中到pin坐标,但我也希望它显示infowindow;除了打开信息窗口,其他一切都正常。任何帮助都将是惊人的!代码中的PHP/WP函数有点杂乱

    <script type="text/javascript">

    var map;
    var infowindow;
    var marker;

    function initialize() {
        var styles = [
            {
                stylers: [
                    { hue: "#c09c3d" },
                ]
            },{
                featureType: "road",
                elementType: "geometry",
                stylers: [
                    { lightness: 50 },
                    { visibility: "simplified" }
                ]
            }
         ];

         infowindow = new google.maps.InfoWindow({
             maxWidth: 275
         });

        var mapOptions = {
            zoom: 4,
            center: new google.maps.LatLng(<?php echo $centerCoords; ?>),
            styles: styles,
            mapTypeId: google.maps.MapTypeId.ROADMAP
            };

        map = new google.maps.Map(document.getElementById('googleMap'), mapOptions);

        var image = '<?php echo get_template_directory_uri(); ?>/images/icon_marker.png';

        var locations = [
             <?php
                // LOOP ARGUMENTS
                $args = array( 'post_type' => 'cbd_dealers', 'posts_per_page' => -1, 'orderby' => 'menu_order', 'order' => 'ASC' ); // -1 Shows ALL Posts
                $loop = new WP_Query( $args );
                while ( $loop->have_posts() ) : $loop->the_post();

                // CUSTOM CONTENT
                $dealerStreetAddress = get_post_meta($post->ID,"dealerStreetAddress",true);
                $dealerCity = get_post_meta($post->ID,"dealerCity",true);
                $dealerState = get_post_meta($post->ID,"dealerState",true);
                $dealerZipCode = get_post_meta($post->ID,"dealerZipCode",true);
                $dealerCoords = get_post_meta($post->ID,"dealerCoords",true);
                $dealerPhoneNumber = get_post_meta($post->ID,"dealerPhoneNumber",true);
                $dealerLink = get_post_meta($post->ID,"dealerLink",true);
            ?>

            {
                latlng : new google.maps.LatLng<?php echo $dealerCoords; ?>,

                info: '<style>a{color:#000000 !important;}a:hover{color:#DCB54F !important;}</style><strong style="line-height:25px;display:block;width:230px;"><?php the_title();  ?></strong><?php echo $dealerStreetAddress; ?><br /><?php echo $dealerCity; ?>, <?php echo $dealerState; ?>&nbsp;<?php echo $dealerZipCode; ?><br /><?php echo $dealerPhoneNumber; ?><br /><a href="<?php echo $dealerLink; ?>" style="line-height:25px;display:block;width:230px;" target="_blank">View Website</a>'
            },

          <?php /* END WHILE AND RESET QUERY */ endwhile; wp_reset_query(); ?>

              ];

            for (var i = 0; i < locations.length; i++) {  
                marker = new google.maps.Marker({
                    position: locations[i].latlng,
                    icon: image,
                    map: map
                });

                google.maps.event.addListener(marker, 'click', (function(marker, i) {   
                  return function() {

                    infowindow.setContent(locations[i].info);
                    infowindow.open(map, marker);
                  }
                })(marker, i));
            }

    }
    function loadScript() {
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&' + 'callback=initialize';
        document.body.appendChild(script);
        }
     function set_map_center(lat, lng) {

              var myLatLng = new google.maps.LatLng(lat, lng);
              infowindow.open(map,marker);

              map.setCenter(myLatLng);
              map.setZoom(12);
              infowindow.open(map, marker);
        }

    window.onload = loadScript;
</script>

var映射;
var信息窗口;
var标记;
函数初始化(){
变量样式=[
{
样式:[
{hue:#c09c3d},
]
},{
特色类型:“道路”,
elementType:“几何体”,
样式:[
{亮度:50},
{可见性:“简化”}
]
}
];
infowindow=新建google.maps.infowindow({
最大宽度:275
});
变量映射选项={
缩放:4,
中心:新的google.maps.LatLng(),
风格:风格,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=new google.maps.map(document.getElementById('googleMap')、mapOptions);
var image='/images/icon_marker.png';
变量位置=[
{
latlng:新的google.maps.latlng,
信息:“a{color:#000000!重要;}a:hover{color:#DCB54F!重要;}


}, ]; 对于(var i=0;i
多亏了苏维的评论,我才更明白

首先,在创建标记时,需要将所有标记存储在一个数组中。然后,在设置地图中心功能中,您可以扫描标记以找到匹配的Lat/Lng,然后触发该标记的单击事件

要触发标记单击事件,请执行以下操作:

google.maps.event.trigger(markers[i], 'click');
以下是我如何检查lat/lng匹配

function set_map_center(lat, lng){
    var pos = new google.maps.LatLng(lat, lng)
    for(var i=0;i<markers.length;i++){
        if(markers[i].position.equals(pos))
            google.maps.event.trigger(markers[i], 'click');

    }
}
功能集地图中心(lat、lng){
var pos=新的google.maps.LatLng(lat,lng)

对于(var i=0;i您希望在所有标记上或仅在特定标记上打开所有信息窗口?类似于?我看到您声明了一个函数集映射中心(lat,lng),但您从未使用过它。您可以调用map.setCenter(marker.position)吗;在将“单击”侦听器添加到标记的函数中?您需要将单击链接绑定到单击标记。因此,在链接的
onClick
事件中,触发它对应的
标记的单击。这样,
标记上的单击侦听器将处理
信息窗口
o(希望这有点道理?)嘿,差不多了-但是你可能会遇到lat/lng相同的情况。@geocodezip在他的演示中通过在
createMarker
函数中创建标记时动态创建链接,从而很好地处理了这个问题。他还将标记放在全局数组中,每次创建一个链接和一个标记时,链接都会被赋予一个要传递给click函数的数组ID-这会触发对数组中正确标记的单击。在javascript方面,我不是最好的。如何创建数组?我已经对它进行了一些尝试,似乎无法将其传递给函数来创建数组:
markerary=[]
。要将项目动态添加到数组中:
markerArray.push(项目)
。希望有帮助?