Leaflet: Добавить возможность устанавливать стили css на DivIcon

Созданный на 6 янв. 2017  ·  3Комментарии  ·  Источник: Leaflet/Leaflet

Я хочу иметь возможность устанавливать стили css на DivIcon при его создании.
На данный момент вы можете настроить только класс css.

Пример использования:
У меня есть класс css, определяющий форму значка маркера, но цвет значка динамически устанавливается на основе данных из базы данных, поэтому его нельзя жестко запрограммировать в классе css.

Самый полезный комментарий

Эта функциональность может быть покрыта методом getElement() из L.Marker , например:

var marker = new L.Marker(myCenter, {
  icon: L.divIcon()
});
map.addLayer(marker);

marker.getElement().style.border = '5px dotted lime';
marker.getElement().style.width = '50px';
marker.getElement().style.height = '50px';

См. Рабочий пример .

Это своего рода крайний случай, поэтому я бы рекомендовал расширить класс L.DivIcon чтобы добавить несколько пользовательских стилей, прочитайте руководства по написанию плагинов. Это было бы что-то вроде

L.DivIcon.CustomColor = L.DivIcon.extend({
    createIcon: function(oldIcon) {
           var icon = L.DivIcon.prototype.createIcon.call(this, oldIcon);
           icon.style.backgroundColor = this.options.color;
           return icon;
    }
})

Лично я не думаю, что эта функция будет широко использоваться, поэтому пока закрою ее.

Все 3 Комментарий

Привет,
что означает цвет значка? Я установил цвет фона в css, и DivIcon изменил цвет
screen shot 2017-01-06 at 6 10 18 pm

разве это не то, что тебе нужно? не могли бы вы быть более конкретными?

Привет @ samik88!

Как я указал в варианте использования, цвет (цветовой код RGB) значка маркера извлекается из базы данных с координатами маркера, поэтому его невозможно определить в классе css (для этого потребуется создать 16777215 css (по одному для каждого цветового кода RGB, не включая непрозрачность), что было бы глупо).

Вы можете изменить свой пример, чтобы увидеть вариант использования, добавив текстовое поле, в которое вы можете ввести цвет RGB для маркера, а затем вы обнаружите, что не можете установить это в DivIcon и, следовательно, не можете изменить цвет значка маркера.

Для этого потребуется установить атрибут стиля css для сгенерированного DIV.

Эта функциональность может быть покрыта методом getElement() из L.Marker , например:

var marker = new L.Marker(myCenter, {
  icon: L.divIcon()
});
map.addLayer(marker);

marker.getElement().style.border = '5px dotted lime';
marker.getElement().style.width = '50px';
marker.getElement().style.height = '50px';

См. Рабочий пример .

Это своего рода крайний случай, поэтому я бы рекомендовал расширить класс L.DivIcon чтобы добавить несколько пользовательских стилей, прочитайте руководства по написанию плагинов. Это было бы что-то вроде

L.DivIcon.CustomColor = L.DivIcon.extend({
    createIcon: function(oldIcon) {
           var icon = L.DivIcon.prototype.createIcon.call(this, oldIcon);
           icon.style.backgroundColor = this.options.color;
           return icon;
    }
})

Лично я не думаю, что эта функция будет широко использоваться, поэтому пока закрою ее.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги