2017-09-01 7 views
4

マップ上にリーフレットを使用して円のレイヤーを描画しています(複数のレイヤーが複数の円で構成されています)。ランタイム中にリーフレットレイヤーにCSSクラスを追加します。

私はfeaturegroup上のすべてのレイヤを保存しました:

:私は円の新しいfeaturegroupを作成し、globalLayerにfeaturegroupを追加することによってそれに新しい円を追加している

this.globalLayer = L.featureGroup(); 

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); 

今、私はいくつかの層にCSSクラスを追加したい:

for (let cssLayer of cssLayers) { // cssLayers is a L.featureGroup[] 
    this.globalLayer.removeLayer(cssLayer); 
    cssLayer.setStyle({className: 'animate'}); 
    this.globalLayer.addLayer(cssLayer); 
} 

このレイヤーには多くの円が含まれているため、計算に時間がかかります。削除して再度追加することなくCSSクラスを追加する方法はありますか?私は現在、この問題を回避する溶液でタイプL.Layer

JsFiddle上に存在しない

this.globalLayer.eachLayer(layer => { 
    layer.setStyle({className: 'animate'}) 
}); 

しかしsetStyle()を試してみた

+2

これは非常に興味深い質問です。私はそれのためのプログラムを作成するのは怠惰なので、私はあなたの正確な問題を回避することができますように、私はあなたにフィドルを作成するようにお願いします。基本的には、クラス名の影響を受けるタグが何であるかを判断する必要があります。例えば、簡単な解決策は、とにかくあなたのレイヤーのためのクラス、例えばmyLayer5を定義することです。それに関連した何かを行う必要があるときはいつでも、document.getElementsByClassName( "myLayer5")を実行し、クラスを追加/削除しますが、myLayer5は今後の使用に備えておいてください。 –

+0

返事ありがとう、私はここでフィドルを作成しました:http://jsfiddle.net/axwL44tm/ – JustYourCasualProgrammer

答えて

2

あなたが前に対応する層にクラスを追加する必要があります。

circleLayer1.setStyle({className: 'myListener'}); 
01など他のラベルに追加します

$('#blink').click(function() { 
    $(".myListener").addClass("blink"); 
}); 

Fiddle

とは、あなたが望む、このクラスをいつでも見つけることができます。

+0

これは私がやったことです – JustYourCasualProgrammer

関連する問題