es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Desactivación del escuchador de eventos mousemove de Mapbox

Estoy utilizando el evento mousemove en mapbox para poder arrastrar un punto alrededor del mapa. Sin embargo, cuando llamo a .off() en él, no se desactiva. Estoy haciendo esto en Angular con TypeScript.

Llamada original:

this.map.mapInstance.on(‘mousemove’, this.onPointMove.bind(this));
this.map.mapInstance.once(‘mouseup’, this.onPointUp.bind(this));

onPointMove(e):

const coords = e.lngLat;

this.map.mapInstance.getCanvasContainer().style.cursor = ‘grabbing’;

console.log(coords);

onPointUp(e):

this.map.mapInstance.getCanvasContainer().style.cursor = ”;

this.map.mapInstance.off(‘mousemove’, this.onPointMove.bind(this));

Después de terminar de arrastrar, el console.log sigue mostrándose cuando muevo el mouse.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el listener de eventos para “mousemove” no se está eliminando correctamente con el método “.off()”. Aquí hay algunas cosas para verificar:

    1. Asegúrese de que se esté utilizando la misma función al agregar y eliminar el listener de eventos. En este caso, se está utilizando “this.onPointMove.bind(this)”, por lo que también debería utilizarse al eliminar el listener.
    2. Verifique que el método “off()” se esté llamando después de que se haya disparado el evento “mousemove”. Si se llama antes, en realidad no se eliminará el listener.
    3. Intente usar una arrow function en lugar de hacer bind con “this” al agregar el listener. Por ejemplo: “this.map.mapInstance.on(‘mousemove’, (e) => this.onPointMove(e));”. Esto a veces puede ayudar a evitar problemas con el bind de “this” al eliminar el listener más adelante.

    Esperemos que uno de estos enfoques ayude a resolver el problema de eliminar el listener de eventos.

Comments are closed.