Изменение свойства маркера карт Google после нажатия кнопки в информационном окне

У меня есть маркеры на карте. Я установил непрозрачность маркера в зависимости от даты в JSON.

Из-за этого при загрузке карты непрозрачность некоторых маркеров составляет 0,5, а некоторых - 1.

Внутри информационного окна маркера есть кнопка. Когда я нажимаю эту кнопку, я хочу изменить непрозрачность на 1.

Ниже приведены некоторые фрагменты моего кода, чтобы показать вам, как я его настраиваю на данный момент.

Любая помощь приветствуется


//For every item in JSON
$.each(dbJSON, function(key, data) {

    var opacity = 1;
    var today = new Date();
    var fadeDate = new Date(data.last_rated); //get the date last rated                 
    fadeDate.setDate(fadeDate.getDate() + 1); //and add 1 date to it to specify the day when the icon should fade

    if(Date.parse(today) > Date.parse(fadeDate)) {
        console.log('fade');
        opacity = 0.5;
    } else {
        console.log('show');
        opacity = 1;
    }

    var postal_town = data.location;
    geocoder.geocode( { 'address': postal_town}, function(results, status) {
        //...
        console.log(opacity);

        var marker = new google.maps.Marker({
            map: map,
            position: results[0].geometry.location,
            title: data.manufacturer_name,
            icon: image,
            rating: data.rating,
            opacity: opacity
        });

        markers[data.id] = marker;

        marker.addListener('click', function() {

            var contentString = '<div id="content">'+
                '<h1>' + data.manufacturer_name + '</h1>' +
                '<button id="seen-it" data-rating="' + data.rating + '" data-entry-id="' + data.id + '">Seen it</button>' +
                '<p><strong>Rating: </strong><span id="rating">' + markers[data.id].rating + '</span></p>' +
                '</div>';

            infowindow.setContent(contentString);
            infowindow.open(map, marker);
        });
    });
});

//Do something when the #seen-it button is clicked
$(document).on('click', '#seen-it', function(event){
    //...
});

person Oliver Evans    schedule 13.06.2017    source источник


Ответы (1)


Поскольку у вас есть идентификатор маркера, хранящийся в data-entry-id, вы можете использовать (при условии, что переменная markers доступна из вашего обработчика)

$(document).on('click', '#seen-it', function(event){
    var markerId = $(this).data('entry-id');
    markers[markerId].setOpacity(1);
});
person Gabriele Petrioli    schedule 13.06.2017
comment
Это работает, и я не совсем понимаю, почему! :) Спасибо - person Oliver Evans; 14.06.2017
comment
@OliverEvans дайте мне знать, какая часть вас смущает, и я постараюсь объяснить. - person Gabriele Petrioli; 14.06.2017
comment
Неважно, я понял. Я думал, что вы меняете значение непрозрачности объекта, и пропустил, что вы используете метод setOpacity. Спасибо - person Oliver Evans; 14.06.2017
comment
@OliverEvans именно так. Рад помочь. - person Gabriele Petrioli; 14.06.2017