¿Cómo llego clientX y clientY para trabajar dentro de mi “arrastre” controlador de eventos en Firefox?
-
23-08-2019 - |
Pregunta
Mozilla Firefox 3.x parece tener un error cuando se escucha evento "ondrag". El objeto de evento no informa de la posición del objeto que se arrastra, clientX, clientY y otras compensaciones de pantalla se ajustan a cero. Esto es muy problemático, ya que quería hacer un elemento de proxy basado en el elemento arrastrado y usar, por supuesto, clientX y clientY para ajustar su posición.
Sé que hay cosas interesantes en torno tales como setDragImage en HTML5 pero quiero proporcionar una abstracción genérica para DD nativa entre los navegadores.
código defectuoso:
document.addEventListener('drag', function(e) {
console.log(e.clientX); // always Zero
}, false);
Nota: Este problema no ocurre en otros eventos (dragstart, dragover) y los eventos mousemove no puede ser capturado mientras se arrastra algo.
Por favor, ayuda!
Solución
he encontrado una solución, he colocado un oyente en el evento "dragover" a nivel de documento, ahora consigo el derecho propiedades X y que puedo exponer a través de un objeto compartido a nivel mundial.
Otros consejos
El evento de arrastre en HTML 5 no es completamente funcional en el actual navegadores. Para simular una situación n de arrastrar y soltar que puedes usar:
- Añadir un evento onMouseDown, el establecimiento de una verdadera var.
- Añadir un evento onmouseup, el establecimiento de esa falsa var.
- Añadir un evento onmousemove, comprobando si eso var es cierto, y si lo es, mover el div de acuerdo a las coordenadas.
Esto siempre ha trabajado para mí. Si se enfrentan a algún problema, ponerse en contacto de nuevo, puedo proporcionar algunos ejemplos.
buena suerte!
Sé que hay cosas interesantes en torno como setDragImage en HTML5 pero desee proporcionar una abstracción genérica para DD nativa entre los navegadores.
Pero por qué hacer algo como esto, no hay bibliotecas como jQuery y Prototipo disponible para el navegador cruz de arrastrar y soltar?
O de lo contrario, si se desea implementar una biblioteca DD de su cuenta, usted puede tomar la ayuda de sus métodos o ampliarlos, ya que tanto las bibliotecas están siguiendo el paradigma orientado a objetos.
Esto le ahorrará mucho tiempo.