Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать чтоб каждая метка при ховере брала свою картинку? (https://javascript.ru/forum/misc/75883-kak-sdelat-chtob-kazhdaya-metka-pri-khovere-brala-svoyu-kartinku.html)

milov 14.11.2018 21:26

Как сделать чтоб каждая метка при ховере брала свою картинку?
 
Добавляю на карту метки и для каждой своё изображение для метки и для ховера тоже. У меня при наведении на любую метку изображение ставиться одно и тоже. Как сделать чтоб у каждой метки своё брала?

var myCollection = new ymaps.GeoObjectCollection({});
for (i in data.item) {
    var layout = ymaps.templateLayoutFactory.createClass('<div><img src="..."/></div>');
    var layout_hover = ymaps.templateLayoutFactory.createClass('<div><img src="..."/></div>');

    var myPlacemark = new ymaps.Placemark([lat, lng], {...}, {
                    iconLayout: layout,
                    iconShape: {
                        type: 'Circle',
                        coordinates: [0, 0],
                        radius: 25
                    }
                });)
    myPlacemark.events
        .add('mouseenter', function (e) {
            e.get('target').options.set("iconLayout", layout_hover);
        })
        .add('mouseleave', function (e) {
            e.get('target').options.set("iconLayout", layout);
        });

    myCollection.add(myPlacemark);
}
myMap.geoObjects.add(myCollection);


Похоже берёт layout последний который в цикле.

рони 14.11.2018 21:38

milov,
замените for на forEach

milov 14.11.2018 21:48

Цитата:

Сообщение от рони (Сообщение 498554)
milov,
замените for на forEach

Проблема осталась.

milov 14.11.2018 21:50

на карту выводится правильно, у каждой метки своя картинка. Проблема с событиями mouseenter mouseleave

рони 14.11.2018 21:54

milov,
где код?

milov 14.11.2018 21:57

код в первом посте.
сделать в jsfidle ?

рони 14.11.2018 22:32

milov,
forEach сделайте :-?

рони 14.11.2018 22:40

milov,
var myCollection = new ymaps.GeoObjectCollection({});
data.item.forEach(function(el, i) {
    var layout = ymaps.templateLayoutFactory.createClass('<div><img src="..."/></div>');
    var layout_hover = ymaps.templateLayoutFactory.createClass('<div><img src="..."/></div>');
    var myPlacemark = new ymaps.Placemark([lat, lng], {...}, {
                    iconLayout: layout,
                    iconShape: {
                        type: 'Circle',
                        coordinates: [0, 0],
                        radius: 25
                    }
                });

    myPlacemark.events
        .add('mouseenter', function (e) {
            e.get('target').options.set("iconLayout", layout_hover);
        })
        .add('mouseleave', function (e) {
            e.get('target').options.set("iconLayout", layout);
        });

    myCollection.add(myPlacemark);
})
myMap.geoObjects.add(myCollection);

milov 15.11.2018 00:05

рони,
именно так и сделал. проблема осталась как я и писал выше.

рони 15.11.2018 00:09

milov,
больше идей нет.


Часовой пояс GMT +3, время: 01:40.