google-maps - 在悬停时更改标记的 z 索引以使其可见

标签 google-maps google-maps-api-3

我试图让我当前悬停的标记具有比其他标记更大的 z-index,这样即使它被其他标记隐藏,当我悬停在它上面时它也会获得完全可见性。

单击任何标记,我想做同样的事情。

  google.maps.event.addListener(this.marker, 'mouseover', function() {
            this.old_ZIndex = this.getZIndex(); //trying to get the current z- index
            console.log(this.old_ZIndex); //this is undefined: why?
            this.setZIndex(this.old_ZIndex + 100); //setting a higher z-index than all other  markers
            console.log("the old z index is ",this.old_ZIndex);
        });

但是有了这个,我将无限增加 z 索引 .. 有没有其他方法可以让我在悬停或单击任何其他标记时恢复原状。 .

或者有什么更好的方法来实现它?

最佳答案

如果您之前没有在标记上设置 zIndex,无论是在初始化时还是使用 setOption() 函数,“this.getZIndex()”总是返回“undefined”。

如果标记超过 100 个,您的脚本也可能无法 100% 运行。

我在下面拼凑了一张非常简单的 map ,其中包含 2 个标记,略有重叠。在标记之一悬停时,它会将 zIndex 设置为将其带到顶部所需的最高值,然后将其返回到之前在鼠标移开时的状态:

    var map;
    var markers = new Array();
    var highestZIndex = 0;

    function initialize() {

        /* SETUP MAP */
        var myLatlng = new google.maps.LatLng(52.06768, -1.33758);
        var mapOptions = {
            center: myLatlng,
            zoom: 10,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        }
        map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

        /* ADD 1st MARKER */
        var markerOptions = {
            position: new google.maps.LatLng(52.06768, -1.32058), 
            map: map,
            zIndex:1
        };
        marker = createMarker(markerOptions, false);
        marker.set("myZIndex", marker.getZIndex());

        google.maps.event.addListener(marker, "mouseover", function() {
            getHighestZIndex();
            this.setOptions({zIndex:highestZIndex+1});
        });
        google.maps.event.addListener(marker, "mouseout", function() {
            this.setOptions({zIndex:this.get("myZIndex")});
        });

        /* ADD 2nd MARKER */
        var markerOptions = {
            position: new google.maps.LatLng(52.06768, -1.33758), 
            map: map,
            zIndex:2    
        };
        marker = createMarker(markerOptions, false);
        marker.set("myZIndex", marker.getZIndex());

        google.maps.event.addListener(marker, "mouseover", function() {
            getHighestZIndex();
            this.setOptions({zIndex:highestZIndex+1});
        });
        google.maps.event.addListener(marker, "mouseout", function() {
            this.setOptions({zIndex:this.get("myZIndex")});
        });

    }

    function createMarker(markerOptions) {
        var marker = new google.maps.Marker(markerOptions);
        markers.push(marker);
        return marker;
    }

    function getHighestZIndex() {

        // if we haven't previously got the highest zIndex
        // save it as no need to do it multiple times
        if (highestZIndex==0) {
            if (markers.length>0) {
                for (var i=0; i<markers.length; i++) {
                    tempZIndex = markers[i].getZIndex();
                    if (tempZIndex>highestZIndex) {
                        highestZIndex = tempZIndex;
                    }
                }
            }
        }
        return highestZIndex;

    }

关于google-maps - 在悬停时更改标记的 z 索引以使其可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9339431/

相关文章:

javascript - 如何在 javascript、谷歌地图中使用 setPanel() 添加地点搜索框和文本方向

Google map 信息窗口中的 YouTube 视频

javascript - 如何创建带有多个标记的谷歌地图,每个标记都有自己的点击网址?

javascript - 旅行商问题的变体——根据约束从许多节点中选择一条好的子路径

android - android中的 map 叠加

twitter-bootstrap - 打印时谷歌地图 Canvas 变得空白(Ctrl + P)

google-maps - 避免对具有多个标记的自定义谷歌地图的地理编码限制

javascript - 如何使用 Google map 检测或检查一条折线是否在另一条折线内部或与其他折线重叠

javascript - 如何从电话间隙中的经纬度获取城市名称?

google-maps - 气球样式的 KML 实体替换在 Google map 中失败,但在 Google 地球中则不然