Листовка с таймером. Выделение другого города (полигона) каждую секунду - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть карта с 4 городами, использующими Leaflet. Mouseover и Mouseout работают нормально, но мне бы хотелось иметь таймер, который автоматически фокусируется на каждом городе по очереди каждые 5 или 10 секунд. Я пытался найти в документации способ найти все многоугольники на карте и затем бесконечно влиять на них oop, но я не могу получить к ним доступ по отдельности, чтобы применять функции для выделения и сброса стилей.

$.getJSON('./data/mymap.json', function (geojson) {
var geojsonLayer = new L.GeoJSON(geojson, {
    style: function () {
        return {
            color: 'blue'
        }
    },
    onEachFeature: function (feature, layer) {
        layer.on('mouseover', function () {
            this.setStyle({
                color: 'green'
            });
            document.getElementById("mapdetails").innerText = layer.feature.properties.name;
        });
        layer.on('mouseout', function () {
            geojsonLayer.resetStyle(this);
            document.getElementById("mapdetails").innerText = '';
        });
        layer.on('click', function () {
            mymap.fitBounds(arrayBounds);
        });
    }
}).addTo(mymap);

});

function highlightLayer(layerID) {
    mymap._layers['name'+layerID].setStyle(highlight); }

var highlight = {
    'color': '#333333',
    'weight': 2,
    'opacity': 1 };

$(document).ready(function() {

    var layerGroup = L.LayerGroup([polygon]);

    for (var i in this._layers) {
        if (this._layers[i].options.name == 'Mytown') {
            console.log('found');
        }
    }

1 Ответ

1 голос
/ 19 февраля 2020

Вы должны вызывать eachLayer () или getLayers () из geojsonLayer.


var i = 0;
function highlightLayer(){
   setTimeout(function(){
      geojsonLayer.resetStyle(); //To clear style of all layers
      var layers =  geojsonLayer.getLayers();
      if(layers.length >= i){
         i = 0;
      }
      layers[i].setStyle(highlight);
      i++;
      highlightLayer(); //Restart Timer
   },1000);
}
...