Necesito saber cuándo el cursor del mouse deja un div
. Así que conecto el evento mouseout
. Sin embargo, si muevo el mouse muy rápidamente fuera del div
, el evento mouseout
no se activa. Eso es correcto: el cursor del mouse era sentado todavía dentro de div
, ahora es fuera dediv
, y sin embargo no se ha llamado al mouseout
devolución de llamada. (Funciona bien si no muevo el mouse muy rápido.)¿Por qué no puedo capturar de manera confiable un evento de mouseout?
Esto es cierto en el más reciente Google Chrome por cierto, así que no es solo un problema de "navegadores antiguos".
Una solución:
Una pregunta acerca de este problema ha sido posed before. Aparentemente es solo un hecho de la vida, y la única solución que he encontrado es monitorear manualmente los eventos mousemove
, cada vez que compruebo las coordenadas x/y del cursor y veo si están dentro del cuadro delimitador div
, por lo que tienes más posibilidades de "notar" si el cursor ya no está dentro de él.
En comparación con dejar que el navegador haga todo esto de forma nativa, realizar cálculos en cada movimiento de píxel es un poco de un golpe de rendimiento. También es tedioso codificar.
a mi pregunta ...
¿Por qué no puede el navegador no puede capturar de forma fiable el evento mouseout
? Si puedo decir de manera confiable cuándo el mouse dejó el div
usando la solución anterior, ¿por qué el navegador no puede hacerlo?
Entiendo (de la respuesta vinculada anteriormente) que JavaScript no intenta interpolar "marcos". Supongamos que si coloca un controlador mousemove
en el document
y mueve rápidamente el mouse 200 píxeles hacia la derecha en una línea horizontal perfecta, puede no obtener 200 mousemove
eventos. Algunos serán extrañados. No tengo un problema con eso.
Pero si se pierden algunos movimientos de píxel justo cuando el mouse cruza el límite del div
, ¿por qué sigue que el evento mouseout
también debe omitirse? Cuando el navegador fin empieza registrar la posición del ratón de nuevo (después de un rápido movimiento repentino), incluso si el ratón está ahora millas fuera de la caja, el punto es que solía ser en la caja y ya no lo es. Entonces, ¿por qué no dispara el evento mouseout entonces?
No entiendo por qué esto sería un problema difícil de resolver para los proveedores de navegadores. (Pero confío en que podría haber una buena razón, que soy demasiado estúpido para pensar.)
Estoy publicando esta pregunta principalmente por curiosidad, pero espero que la respuesta pueda dar una idea que podría ayúdame a solucionar el problema de manera más eficiente. Además, cualquier solución alternativa (que sea más rápida que la presentada anteriormente) sería bienvenida.
Esto es de ninguna ayuda para usted (de aquí un comentario, en lugar de una respuesta), pero que el comportamiento más definitivamente suena como un error. Probablemente también sea obvio, pero para responder a su pregunta "¿por qué se sigue que el evento mouseout también se debe omitir?", La respuesta sería que * no *, ya que es un comportamiento no intencional. – jmar777
Interesante. Eso es mucha ayuda para mí en realidad, si tienes razón, es un error. ¡Me parece extraño que este tipo de error exista en Chrome 15! Voy a hacer una página de prueba y probarla en otros navegadores para ver qué tan extendida está. Y podría enviar un informe de error a crbug.com y ver qué hacen con él. Gracias. – callum
FYI: Chrome 15 no está en el canal estable aún – Candide