typescript - Adicionar classe CSS a uma camada do leaflet durante a execução
Estou usando o Leaflet para desenhar camadas de círculos (então existem várias camadas, cada uma consistindo de vários círculos) em um mapa.
Eu salvei todas as camadas em um grupo de recursos:
this.globalLayer = L.featureGroup();
Estou adicionando novos círculos a ele criando um novo grupo de elementos dos círculos e adicionando o grupo de elementos à camada global:
let circleLayer: L.featureGroup();
let point1 = L.circle([pos_lat, pos_long], {color: color, opacity: 1,
radius: radius});
let point2 = L.circle([pos_lat, pos_long], {color: color, opacity: 1,
radius: radius});
circleLayer.addLayer(point1);
circleLayer.addLayer(point2);
// etc.
this.globalLayer.addLayer(circleLayer);
Agora eu quero adicionar uma classe CSS a algumas das camadas:
for (let cssLayer of cssLayers) { // cssLayers is a L.featureGroup[]
this.globalLayer.removeLayer(cssLayer);
cssLayer.setStyle({className: 'animate'});
this.globalLayer.addLayer(cssLayer);
}
Isso funciona, mas como as camadas contêm muitos círculos, isso leva um tempo para ser calculado. Há uma maneira de apenas adicionar uma classe CSS sem removê-las e adicioná-las novamente?
Eu tentei
this.globalLayer.eachLayer(layer => {
layer.setStyle({className: 'animate'})
});
Mas setStyle() não existe no tipo L.Layer
JsFiddle com minha solução alternativa atual
Resposta #1
Você precisará adicionar uma classe à camada correspondente antes de adicioná-la a outros rótulos, como
circleLayer1.setStyle({className: 'myListener'});
e então você pode encontrar esta aula a qualquer momento que quiser:
$('#blink').click(function() {
$(".myListener").addClass("blink");
});
Fidel.
Resposta #2
Não tenho certeza se esta é a melhor prática, mas descobri que você pode usar o atributo _path da camada:
this.globalLayer.eachLayer(layer => {
layer._path.classList.add('animate')
});