Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

267
Visualizações
La ubicación encontrada del mapa del folleto desencadena un oyente no deseado

Tengo un mapa de folleto en el que map.locate() se puede llamar de dos maneras: 1. Botón de ubicación Easybutton, 2. Una llamada regular cada minuto usando setTimeout.

Cada uno tiene su propio oyente de locationfound encontrada, o al menos me gustaría que lo tuvieran; este es el problema: hacer clic en el botón fácil activa tanto el oyente control._map.on('locationfound'..) Y el map.on('locationfound'..) oyente dentro de getLocation().

La llamada normal a getLocation() solo activa el map.on('locationfound'..) . ¿Tiene esto algo que ver con el alcance? ¿Cómo lo obtengo para que el botón fácil solo active su oyente previsto y la llamada setTimeout a map.locate() solo active el oyente en getLocation()?

 L.easyButton({ position: easy_position, states:[ { stateName: 'unloaded', icon: 'fa-location-arrow', title: 'load image', onClick: function(control){ control.state("loading"); control._map.on('locationfound', function(e){ alert('location found - easybutton'); this.setView(e.latlng,18); // go to current location control.state('loaded'); setTimeout(function(){ control.state('unloaded'); }, 3000); }); control._map.on('locationerror', function(){ control.state('error'); setTimeout(function(){ control.state('unloaded'); }, 3000); }); control._map.locate(); setTimeout(function(){ control.state('unloaded'); }, 10000); // give it ten seconds to find the location } }, { stateName: 'loading', icon: 'fa-spinner fa-spin' }, { stateName: 'loaded', icon: 'fa-thumbs-up' }, { stateName: 'error', icon: 'fa-frown-o', title: 'location not found' } ] }).addTo(map);
 function updateLocation() { getLocation(false); setTimeout(updateLocation, 60000); } getLocation = function(goToLocation) { map.on('locationfound', function(e) { alert('location found - getLocation()'); var lat = e.latitude; var lng = e.longitude; if(goToLocation) { pan_to(lat,lng,0.5); } }); map.on('locationerror', function(e) { console.log(e); }); map.locate({ setView: false, maxZoom: 16 }); }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Puede mitigar su problema utilizando el método map.once() para adjuntar sus detectores de eventos (tanto en su proceso regular como en su botón), para que se eliminen después de disparar una vez:

Se comporta como on(…) , excepto que el oyente solo será despedido una vez y luego eliminado.

Todavía hay algunas situaciones transitorias en las que ambos oyentes pueden activarse al mismo tiempo: en caso de que se haga clic en su botón mientras su proceso normal ha iniciado una ubicación, pero el resultado aún está pendiente, o al revés.

Desafortunadamente, Leaflet no diferencia entre las llamadas al método map.locate() . De ahí la sugerencia de @IvanSanchez de usar directamente la API del navegador.

Puede eliminar esas situaciones transitorias administrando una bandera/mutex cada vez que inicia una ubicación, y no ejecutar la otra, o retrasarla, en caso de que su mutex esté bloqueado.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda