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

176
Visualizações
Determinar cuándo se produce un arrastre de mapa con dos dedos en un mapa de folleto

Estoy tratando de solucionar el problema en el que un mapa es solo una parte de la página, y en un dispositivo móvil, si se desplaza hacia abajo hasta el mapa, llena la pantalla y ya no puede desplazarse por la página; en su lugar, desplaza el mapa.

así que cambié la opción arrastrable para tener desplazamientos de mapa con dos dedos. Esto funciona.

 var mymap = L.map('mapid', { center: [latitude,longitude], zoom: 17, layers: [streetmap], //default layer dragging: !L.Browser.mobile, tap: !L.Browser.mobile //twofinger map controls, one finger page scrolling });

Pero todavía quiero que el mapa siga automáticamente al jugador, a menos que haya arrastrado deliberadamente el mapa (y luego un botón para volver al movimiento automático). El código de relevancia para esas cosas está aquí:

 var panbtn = L.easyButton({ states: [{ stateName: 'pauseAutoMove', icon: 'fa-sign-in fa-lg', title: 'Centre display at current Player', //Tooltip onClick: function(btn, map) { //if you click the button whilst it is in pauseAutoMove, recentre map and unpause currentAutoMove = true; //Set flag, that currently map is being moved to recentre mymap.panTo([latitude,longitude]); currentAutoMove = false; //Remove flag again pauseAutoMove = false; //set flag to stop Auto moving map panbtn.state('AutoMove'); } },{ stateName: 'AutoMove', //clicking the button once it is doing AutoMove does nothing icon: 'fa-crosshairs fa-lg', }] }).addTo(mymap); mymap.on("zoomstart", function (e) { currentAutoMove = true }); //Set flag, that currently map is moved by a zoom command mymap.on("zoomend", function (e) { currentAutoMove = false }); //Remove flag again mymap.on('movestart',(e)=>{ //Check if map is being moved if(!currentAutoMove){ //ignore if it was a natural PlayerLoc or programmatic update pauseAutoMove = true; //set flag to stop Auto moving map panbtn.state('pauseAutoMove'); //change button style to remove crosshairs and have a arrow-in icon } });

y en otros lugares

 function updatemap() { // Update the current player location on map playerLoc.setLatLng([latitude,longitude]); //update current player marker instead of creating new ones //other stuff goes here to update too if(!pauseAutoMove){ //pan the map to follow the player unless it is on pause currentAutoMove = true; //Set flag, that currently map is moved by a normal PlayerLoc Auto update mymap.panTo([latitude,longitude]); currentAutoMove = false; //Remove flag again }; mymap.invalidateSize(); //reset map view }; // end updatemap

Ahora que tengo map-drag con dos dedos, en el móvil, NO registra el cambio de estado a panbtn. El mapa vuelve a aparecer y no puedo detenerlo ahora. (Todavía funciona según lo previsto en una pantalla de PC).

Entonces, mi pregunta: parece mymap.on('movestart',(e)=>{... ¿NO se activa al arrastrar con dos dedos? ¿Hay alguna forma de volver a habilitarlo?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Los eventos de folleto para la interacción táctil, incluido el zoom táctil (que es lo que sucede cuando usa 2 dedos, incluso solo para desplazarse) son "touchstart" , "touchmove" y "touchend" .

Sin embargo, es probable que estos eventos se activen incluso con un toque de un dedo, por lo que es posible que deba agregar una verificación similar a Leaflet TouchZoom hamdler: https://github.com/Leaflet/Leaflet/blob/v1.7.1/src/map/handler /Map.TouchZoom.js#L68

Entonces podrías combinar con lo que tienes con algo como:

 function mayDisableAutomove() { //Check if map is being moved if(!currentAutoMove){ //ignore if it was a natural PlayerLoc or programmatic update pauseAutoMove = true; //set flag to stop Auto moving map panbtn.state('pauseAutoMove'); //change button style to remove crosshairs and have a arrow-in icon } }); mymap.on('touchmove', (e) => { if (!e.touches || e.touches.length !== 2) { return; } mayDisableAutomove(); }); mymap.on('movestart', mayDisableAutomove);
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