Quiero poder detectar cuándo el mouse sale de la ventana para poder evitar que los eventos se activen mientras el mouse del usuario está en otro lugar.
¿Alguna idea de cómo hacer esto?
Quiero poder detectar cuándo el mouse sale de la ventana para poder evitar que los eventos se activen mientras el mouse del usuario está en otro lugar.
¿Alguna idea de cómo hacer esto?
Respuestas:
Tenga en cuenta que mi respuesta ha envejecido mucho.
Este tipo de comportamiento generalmente se desea al implementar el comportamiento de arrastrar y soltar en una página html. La siguiente solución se probó en IE 8.0.6, FireFox 3.6.6, Opera 10.53 y Safari 4 en una máquina con MS Windows XP.
Primero una pequeña función de Peter-Paul Koch; controlador de eventos de navegador cruzado:
Y luego use este método para adjuntar un controlador de eventos al evento mouseout de objetos de documento:
Finalmente, aquí hay una página html con el script incrustado para la depuración:
fuente
Si está utilizando jQuery, ¿qué tal este código corto y dulce?
Este evento se activará siempre que el mouse no esté en su página como lo desea. Simplemente cambie la función para hacer lo que quiera.
Y también podrías usar:
Para disparar cuando el mouse entra de nuevo a la página.
Fuente: https://stackoverflow.com/a/16029966/895724
fuente
Esto funciona para mi:
fuente
addEvent
?if (!evt.toElement && !evt.relatedTarget)
Para detectar la salida del mouse sin tener en cuenta la barra de desplazamiento y el campo de autocompletar o inspeccionar:
Explicaciones de condiciones:
======================== EDITAR ========================= ======
document.addEventListener ("mouseleave") parece no activarse en la nueva versión de Firefox, mouseleave debe adjuntarse a un elemento como body o un elemento secundario.
Sugiero usar en su lugar
O
fuente
El uso del evento onMouseLeave evita el burbujeo y le permite detectar fácilmente cuando el mouse sale de la ventana del navegador.
http://www.w3schools.com/jsref/event_onmouseleave.asp
fuente
document.onmouseleave = function() { alert('You left!') };
No use document.body que dispara barras de desplazamiento que encogen el cuerpo! No se necesita código para prevenir incendios en los elementos. Buena explicación: developer.mozilla.org/en-US/docs/Web/API/Element/…Ninguna de estas respuestas funcionó para mí. Ahora estoy usando:
Estoy usando esto para un widget de carga de archivos de arrastrar y soltar. No es absolutamente exacto, se activa cuando el mouse llega a una cierta distancia del borde de la ventana.
fuente
He intentado todo lo anterior, pero nada parece funcionar como se esperaba. Después de investigar un poco, descubrí que e.relatedTarget es el html justo antes de que el mouse salga de la ventana .
Entonces ... terminé con esto:
Por favor, avíseme si encuentra algún problema o mejora.
Actualización 2019
(como descubrió el usuario1084282)
fuente
relatedTarget
es nulo cuando el mouse sale de la ventana. Inspirado por la respuesta de @ user1084282, cámbielo a esto:if(!e.relatedTarget && !e.toElement) { ... }
y funcionaif(!e.relatedTarget && !e.toElement)
lugar de la condición en la respuesta real. Detecta que el ratón abandona el cuerpo del documento.Retiro lo que dije. Es posible. Escribí este código, funciona perfectamente.
funciona en chrome, firefox, opera. No se ha probado en IE, pero se supone que funciona.
editar. IE como siempre causa problemas. Para que funcione en IE, reemplace los eventos de la ventana al documento:
combinarlos para la detección del cursor del navegador cruzado o0: P
fuente
aplicar este CSS:
Esto asegura que el elemento html ocupa toda la altura de la ventana.
aplicar este jquery:
El problema con el mouseover y mouseout es que si pasa el mouse sobre / fuera de html a un elemento secundario, se activará el evento. La función que di no se activa al pasar el mouse a un elemento secundario. Solo se activa cuando coloca el mouse fuera / dentro de la ventana
solo para que sepas que puedes hacerlo cuando el usuario pase el mouse por la ventana:
fuente
Probé uno tras otro y encontré la mejor respuesta en ese momento:
https://stackoverflow.com/a/3187524/985399
Omití los navegadores antiguos, así que reduje el código para que funcione en navegadores modernos (IE9 +)
Aquí ves el soporte del navegador
Eso fue bastante corto, pensé
Pero el problema persiste porque "mouseout" se activa en todos los elementos del documento .
Para evitar que suceda, use mouseleave (IE5.5 +). Vea la buena explicación en el enlace.
El siguiente código funciona sin activar elementos dentro del elemento para estar dentro o fuera de. Intente también arrastrar y soltar fuera del documento.
Puede configurar el evento en cualquier elemento HTML. Sin
document.body
embargo, no tenga el evento activado, porque la barra de desplazamiento de Windows puede encoger el cuerpo y dispararse cuando el puntero del mouse está sobre la barra de desplazamiento cuando desea desplazarse pero no desea activar un evento mouseLeave sobre él. Actívelo en sudocument
lugar, como en el ejemplo.fuente
Tal vez si está escuchando constantemente OnMouseOver en la etiqueta del cuerpo, entonces devuelva la llamada cuando el evento no esté ocurriendo, pero, como dice Zack, esto podría ser muy feo, porque no todos los navegadores manejan los eventos de la misma manera, incluso hay algunos posibilidad de que pierda MouseOver incluso al estar sobre un div en la misma página.
fuente
Quizás esto ayude a algunos de los que vendrán aquí más tarde.
window.onblur
ydocument.mouseout
.window.onblur
se activa cuando:Ctrl+Tab
oCmd+Tab
.Básicamente, cada vez que la pestaña del navegador pierde el foco.
document.mouseout
se activa cuando:Ctrl+Tab
oCmd+Tab
.Básicamente, en cualquier caso, cuando el cursor abandona el documento.
fuente
window.onblur
también. +1Esto puede ser un poco complicado, pero solo se activará cuando el mouse abandone la ventana. Seguí captando eventos infantiles y esto lo resolvió
fuente
fuente
Esto funcionó para mí. Una combinación de algunas de las respuestas aquí. E incluí el código que muestra un modelo solo una vez. Y el modelo desaparece cuando se hace clic en cualquier otro lugar.
fuente
Ver
mouseover
ymouseout
.fuente
No he probado esto, pero mi instinto sería hacer una llamada a la función OnMouseOut en la etiqueta del cuerpo.
fuente
Esto funcionará en Chrome,
fuente