如何判断目前是否选择了Google地图标记?

时间:2012-08-15 14:37:15

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

我在Google Maps V3上有足够简单的地图。

我将鼠标上的图标图像更改为侦听器事件,我在鼠标输出时将其更改为简单。

单击标记时我再次更改图标,但是,我想在选择标记时保留该图标。当我鼠标移出时,标记图标会再次更改,因为我告诉它在鼠标移出侦听器事件中这样做。

我需要从mouseout监听器事件中排除选定的标记,但我无法弄清楚如何找到我当前选择的标记。有什么想法吗?

这是我的代码

        google.maps.event.addListener(marker, 'mouseover', function () {
            this.setIcon("images/star-3-white.png");

        });
        google.maps.event.addListener(marker, 'mouseout', function () {
                //  this overwrites the image again, 
                //  need to exclude the current one here
                this.setIcon("images/star-3.png");
        });

        google.maps.event.addListener(marker, 'click', function () {
            this.setIcon("images/star-3-white.png");
            infowindow.setContent(this.html);
            infowindow.open(map, this);
        });

3 个答案:

答案 0 :(得分:4)

要么

  1. 创建标记.selected的成员并在单击它时设置,然后在mouseout函数中测试它(如果你想完成鼠标悬停功能),如果设置了它,请不要更改它
  2. 创建一个全局变量(假设一次只选择一个标记),设置等于单击的标记。在mouseout(和mouseover)中检查它是否等于当前标记(this),如果它不是更改图标。

答案 1 :(得分:4)

有点长的啰嗦,但我刚添加了一个变量来存储我知道的当前标记标题是唯一的。然后我检查是否是我选择的那个。此外,我确保重置所有标记,使其不与选定的颜色保持相同的颜色:

    var clickedMarkerTitle = null;
    function addMarker(latLng, _title, contentString) {
        marker = new google.maps.Marker({
            map: map,
            position: latLng,
            icon: "images/star-3.png",
            title: _title,
            html: contentString
        });

        google.maps.event.addListener(marker, 'mouseover', function () {
            this.setIcon("images/star-3-white.png");

        });
        google.maps.event.addListener(marker, 'mouseout', function () {
            //this.setIcon("images/star-3.png");
            testIcon(this);
        });

        google.maps.event.addListener(marker, 'click', function () {
            resetMarkerIcons();
            saveIconState(this);
            this.setIcon("images/star-3-white.png");
            infowindow.setContent(this.html);
            infowindow.open(map, this);

        });

        markersArray.push(marker);

    }
    function resetMarkerIcons() {
        //  reset all the icons back to normal except the one you clicked
        for (var i = 0; i < markersArray.length; i++) {
            markersArray[i].setIcon("images/star-3.png");

        }

    }
    function saveIconState(marker) {
        clickedMarkerTitle = marker.title;
    }
    function testIcon(marker) {
        $('#test').html('<span>' + marker.title + '</span>');

        if (clickedMarkerTitle != null) {
            $('#test').html('<span>' + marker.title + ' and its not null</span>');
            if (marker.title != clickedMarkerTitle) {
                $('#test').html('<span>' + marker.title + ' and ' + clickedMarkerTitle + '</span>');
                marker.setIcon("images/star-3.png");
            }
        }
        else {
            marker.setIcon("images/star-3.png");
        }
    }

答案 2 :(得分:2)

在搜索其他内容时偶然发现了这个答案。这样做。

var currentMarker = null;
var markerIcon = 'some.svg';
var markerIconHover = 'some-other.svg';

// Initialize marker here
[...]

// Set current marker on click
google.maps.event.addListener(marker, 'click', function() {
    // Reset market icons
    clearMarkerIcons();  
    // Set hovered map marker
    marker.setIcon(markerIconHover);
    // Set current marker
    currentMarker = marker;
    // Open infoWindow here
    [...]
});

// Set correct icon on mouseover
google.maps.event.addListener(marker, 'mouseover', function() {
    marker.setIcon(markerIconHover);
});

// Set correct icon on mouseout
google.maps.event.addListener(marker, 'mouseout', function() {
    if (currentMarker !== marker) {
        marker.setIcon(markerIcon);
    }
});

// Clear all set marker icons
function clearMarkerIcons() {
    for (var i = 0; i < map.markers.length; i++) {
        map.markers[i].setIcon(markerIcon);
    }
}