【问题标题】:Google Maps overlay message won't stay hidden谷歌地图覆盖消息不会保持隐藏
【发布时间】:2016-07-06 00:54:53
【问题描述】:

我有一个地图,其中填充了通过 AJAX 检索到 php 服务器调用的标记。在 AJAX 返回时,我循环遍历每个标记并设置一个 onClick 侦听器以打开覆盖的地图消息。

一切正常。标记出现,当我单击标记时,消息会重叠显示。但是,在我单击关闭消息并以任何方式拖动或缩放或更改地图后,该消息会重新出现。它不会一直隐藏。

我注意到的另一件事是,如果我单击一个标记,然后单击另一个标记,该消息将变为新的标记消息。但是如果我拖动地图,消息开始在前一个和当前标记的消息之间来回切换,直到我停止拖动它并且它稳定到当前标记的消息。我不知道这些问题是否相关。任何建议将不胜感激。谢谢。

//create map
var mapOptions = {
    zoom: 3,
    center: defaultLatLng,
    minZoom: 3,
    mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map($("div#map_canvas").get(0), mapOptions);

//send ajax requesting markers
$.ajax({
    ...
    success: function(data) {
        $.each(data, function(index, value) {
            var markerLat = value.lat;
            var markerLng = value.lng;

            var marker = new google.maps.Marker({
                position: new google.maps.LatLng(markerLat, markerLng),
                map: map        
            });
            marker.id = value.id; //set the marker id

            var markerListener = google.maps.event.addListener(marker, "click", function(event){
                /*****move map position****/
                map.setCenter(marker.getPosition());

                //send ajax requesting data based on id of marker clicked
                $.ajax({
                    ...
                    success: function(data) {
                        //actual message 
                        var html = "<a id='close' href='#'>close</a>" 
                            + "<p>" + data.message + "</p>";
                        setMapMessage(html, map);
                    } //end success for markerListener
                }); //end ajax for markerListener
            });  //end markerListener
        }); //end $.each()
    } //end success for ajax getting all the markers
}); //end ajax for getting all the markers

function setMapMessage(message, map){
    //Create custom message
    var overlay = new google.maps.OverlayView();
    overlay.draw = function() {
        $("#map_message").html(message).show();
        $("a#close").click(function(){
            $("#map_message").hide();
        });

        //get the coordinates of the map (used to set X and Y of the map_message)
        var mapPosition = $("#map_canvas").position(); 

        var mapContainerX = mapPosition.left;
        var mapContainerY = mapPosition.top;

        $("#map_message").css({
            top: mapContainerY,
            left: mapContainerX 
        });
    };
    overlay.setMap(map);
}

【问题讨论】:

  • $("#map_message") 是什么?
  • $("#map_message") 和 $("#map_canvas") 是 div

标签: javascript jquery google-maps google-maps-api-3


【解决方案1】:

我终于想出了一个解决办法。我只是将 z-index 设置为 -1。

$("a#close").click(function(){
    $("div#map_message").hide().css("z-index", -1);
});

在标记监听器 onClick 中,我将 z-index 设置为 5。

var markerListener = google.maps.event.addListener(marker, "click", function(event){
    /*****move map position****/
    map.setCenter(marker.getPosition());

    //send ajax requesting data based on id of marker clicked
    $.ajax({
        ...
        success: function(data) {
            //actual message     
            var html = "<a id='close' href='#'>close</a>" 
                + "<p>" + data.message + "</p>";
            setMapMessage(html, map);
            $("div#map_message").css("z-index", 5);
        } //end success for markerListener
    }); //end ajax for markerListener
});  //end markerListener

【讨论】:

  • 但是消息的飞来飞去还是很麻烦
猜你喜欢
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多