Клуб API Карт

Заголовок не указан

Пост в архиве.

Добрый день!

Столкнулся с некорректной работой обработчиков событий MouseOver/MouseOut. Задача состоит подменять стиль иконки у маркера при наведении мыши.


        YMaps.Events.observe(map, map.Events.Click, function(event){
            var lat = event.getGeoPoint().getLat();
            var lng = event.getGeoPoint().getLng();
            var point = new YMaps.GeoPoint(lng, lat);
           
            var defaultMarkerStyle = new YMaps.Style();
            defaultMarkerStyle.iconStyle = new YMaps.IconStyle();
            defaultMarkerStyle.iconStyle.href = "/img/gmap/house_object.gif"


            var hoverMarkerStyle = new YMaps.Style();
            hoverMarkerStyle.iconStyle = new YMaps.IconStyle();
            hoverMarkerStyle.iconStyle.href = "/img/gmap/house_object_hover.gif"
           
            var marker = new YMaps.Placemark(point, {
                hideIcon:    false,
                style:        defaultMarkerStyle
            });
           
           
            YMaps.Events.observe(marker, marker.Events.MouseOver, function(){
                this.setStyle(hoverMarkerStyle);
                this.update();
            });
           
            YMaps.Events.observe(marker, marker.Events.MouseOut, function(){
                this.setStyle(defaultMarkerStyle);
                this.update();
            });
           
             
            map.addOverlay(marker);
           
        })





Подмена стиля иконки происходит только при наведении курсора. При его удалении от маркера, стиль не возвращается в прежнее состояние (defaultMarkerStyle). В чем может быть потенциальная проблема?

4 комментария
Можно попробовать ввести флаг в каком состоянии находится метка (наведен на нее курсор или нет), то все заработает: var marker = new YMaps.Placemark(new YMaps.GeoPoint(37.64, 45.56), {style: 'default#bluePoint'}); marker.hover = 0; YMaps.Events.observe(marker, marker.Events.MouseOver, function(){ if (!this.hover) { this.setStyle("default#greenPoint"); marker.hover = 1; } }); YMaps.Events.observe(marker, marker.Events.MouseOut, function(){ if (this.hover) { this.setStyle("default#bluePoint"); marker.hover = 0; } }); Получилось?
спасибо, действительно это помогло. В продолжении темы хотел бы поинтересоваться имеется ли какая-то возможность (кроме как доступа к приватному свойству), которая влияет на z-index картинки маркера. Это бывает очень полезно в случаях, когда на маленькой площади отображается значительное кол-во маркеров. На данный момент я решаю эту проблему с помощью приватного свойства: this._icon.topNode.style.zIndex заранее, спасибо.
Вы можете создать шаблон для значка метки и выставить там любые необходимые css-свойства.
я имел в виду возможность менять z-index динамически, к примеру при возникновении того же события mouseover