4

我在 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);
        });
4

3 回答 3

4

任何一个

  1. 创建标记 .selected 的成员并在单击它时对其进行设置,然后在 mouseout 功能中对其进行测试(如果要完成,请使用 mouseover 功能),如果已设置,请不要更改图标。
  2. 创建一个全局变量(假设一次只选择一个标记),将其设置为等于单击的标记。在 mouseout(和 mouseover)中检查它是否等于当前标记(this),如果它不改变图标。
于 2012-08-15T15:09:53.010 回答
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");
        }
    }
于 2012-08-15T15:13:45.270 回答
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);
    }
}
于 2015-04-07T11:54:43.873 回答