Estoy usando react-leaflet con bastantes manejadores de eventos personalizados añadidos a mi mapa leaflet. No puedo detener la propagación en el domevent del leaflet porque al hacerlo se producen problemas (sobre todo con componentes de otros frameworks que estoy utilizando como material-ui).
Así que en caso de que alguien esté en el mismo barco, ¡aquí hay una solución que me está funcionando!
import React, { useEffect, useRef } from 'react'
import { DomEvent } from 'leaflet'
import { useLeaflet } from 'react-leaflet'
const PreventLeafletControl = (props) => {
const controlRef = useRef()
const leaflet = useLeaflet()
useEffect(() => {
if (controlRef) {
const eventsClone = leaflet.map._events
const eventsEmpty = Object.keys(eventsClone).reduce((accumulator, key) =>
accumulator[key] = []
, {})
DomEvent.addListener(controlRef.current, 'mouseover', () => {
leaflet.map._events = eventsEmpty
leaflet.map._handlers.forEach(handler => handler.disable())
})
DomEvent.addListener(controlRef.current, 'mouseout', () => {
leaflet.map._handlers.forEach(handler => handler.enable())
leaflet.map._events = eventsClone
})
}
})
return <div ref={controlRef}>
{props.children}
</div>
}
export default PreventLeafletControl
Sólo envolver <PreventLeafletControl>
alrededor de su componente de interfaz de usuario personalizado y debería estar bien.
0 votos
¿Alguna idea de cómo hacer esto con CSS? Necesito desactivar el arrastre en el móvil usando una consulta de medios. Intenté poner una capa transparente encima, pero se arrastra a través de esa capa. Incluso he jugado con eventos de puntero pero no hubo suerte. El enfoque adecuado es probablemente a través del uso de -webkit-user-drag: none; pero he aplicado que a cada elemento que puedo encontrar y todavía no hay suerte. Gracias.
0 votos
He respondido a esta pregunta debajo de .