¿Hay una manera rápida y fácil de hacer esto en jQuery que me falta?
No quiero usar el evento mouseover porque ya lo estoy usando para otra cosa. Solo necesito saber si el mouse está sobre un elemento en un momento dado.
Me gustaría hacer algo como esto, si solo hubiera una función "IsMouseOver":
function hideTip(oi) {
setTimeout(function() { if (!IsMouseOver(oi)) $(oi).fadeOut(); }, 100);
}
Respuestas:
Establezca un tiempo de espera en el mouseout para desvanecerse y almacenar el valor de retorno a los datos en el objeto. Luego, sobre el mouse, cancele el tiempo de espera si hay un valor en los datos.
Elimine los datos en la devolución de llamada del desvanecimiento.
En realidad, es menos costoso usar mouseenter / mouseleave porque no se activan para el menú cuando se activa el mouseover / mouseout de los niños.
fuente
Este código ilustra lo que Happytime Harry y yo estamos tratando de decir. Cuando el mouse entra, sale una información sobre herramientas, cuando el mouse se va establece un retraso para que desaparezca. Si el mouse ingresa al mismo elemento antes de que se active el retraso, entonces destruimos el activador antes de que se active utilizando los datos que almacenamos antes.
fuente
Un control de desplazamiento limpio y elegante:
fuente
ADVERTENCIA:
is(':hover')
está en desuso en jquery 1.8+. Ver esta publicación para una solución.También puede usar esta respuesta: https://stackoverflow.com/a/6035278/8843 para probar si el mouse está sobre un elemento:
fuente
:hover
no es un selector jQuery válido: api.jquery.com/category/selectors (fuente: bugs.jquery.com/ticket/11574 )document.querySelectorAll(':hover')
Puede usar el
hover
evento de jQuery para realizar un seguimiento de forma manual:fuente
$.data
no involucra manipulación de cuerdas.Necesitaba algo exactamente como esto (en un entorno un poco más complejo y la solución con muchos 'mouseenters' y 'mouseleaves' no funcionaba correctamente), así que creé un pequeño complemento jquery que agrega el método ismouseover. Ha funcionado bastante bien hasta ahora.
Luego, en cualquier lugar del documento, lo llama así y devuelve verdadero o falso:
Lo probé en IE7 +, Chrome 1+ y Firefox 4 y funciona correctamente.
fuente
En jQuery puedes usar .is (': hover'), entonces
ahora sería la forma más concisa de proporcionar la función solicitada en el OP.
Nota: lo anterior no funciona en IE8 o inferior
Como alternativa menos sucinta que funciona en IE8 (si puedo confiar en el modo IE8 de IE9), y lo hace sin disparar por
$(...).hover(...)
todas partes, ni requiere conocer un selector para el elemento (en cuyo caso la respuesta de Ivo es más fácil):fuente
$(':hover')
hace el trabajo en IE8. Es un pseudo selector CSS2 válido, por lo que debería funcionar.Tomé la idea de SLaks y la envolví en una clase pequeña .
fuente
Hice un complemento jQuery que puede hacer esto y mucho más. En mi complemento, para obtener todos los elementos sobre los que se encuentra el cursor, simplemente haga lo siguiente:
Como mencioné, también tiene muchos otros usos, como puede ver en el
jsFiddle encontrado aquí
fuente
Como no puedo comentar, ¡escribiré esto como respuesta!
¡Comprenda la diferencia entre el selector css ": hover" y el evento hover!
": hover" es un selector de CSS y de hecho se eliminó con el evento cuando se usa así
$("#elementId").is(":hover")
, pero en este sentido no tiene nada que ver con el evento de desplazamiento jQuery.si codificas
$("#elementId:hover")
, el elemento solo se seleccionará cuando pase el mouse por encima. la declaración anterior funcionará con todas las versiones de jQuery al seleccionar este elemento con una selección de CSS pura y legítima.Por otro lado, el evento se cierne, que es
De hecho, se considera como jQuery 1.8 aquí el estado del sitio web de jQuery:
Por qué eliminaron el uso es (": hover") no está claro, pero bueno, todavía puede usarlo como se indica arriba y aquí hay un pequeño truco para seguir usándolo.
Ah, y no recomendaría la versión de tiempo de espera ya que esto trae mucha complejidad , use las funcionalidades de tiempo de espera para este tipo de cosas si no hay otra manera y créanme, ¡en el 95% de los casos hay otra manera !
Espero poder ayudar a un par de personas por ahí.
Greetz Andy
fuente
Gracias a los dos. En algún momento tuve que renunciar a tratar de detectar si el mouse todavía estaba sobre el elemento. Sé que es posible, pero puede requerir demasiado código para lograrlo.
Me tomó un poco de tiempo, pero tomé sus dos sugerencias y se me ocurrió algo que funcionaría para mí.
Aquí hay un ejemplo simplificado (pero funcional):
Y luego, para que esto funcione en algún texto, esto es todo lo que tengo que hacer:
Junto con una gran cantidad de CSS sofisticado, esto permite algunas sugerencias de herramientas de ayuda al pasar el mouse. Por cierto, necesitaba el retraso en el mouseout debido a pequeños espacios entre las casillas de verificación y el texto que causaban que la ayuda parpadeara al mover el mouse. Pero esto funciona como un encanto. También hice algo similar para los eventos de enfoque / desenfoque.
fuente
Veo que los tiempos de espera se usan mucho para esto, pero en el contexto de un evento, ¿no puedes mirar las coordenadas, así?
Dependiendo del contexto, es posible que deba asegurarse (this == e.target) antes de llamar a areXYInside (e).
fyi- Estoy buscando usar este enfoque dentro de un controlador dragLeave, para confirmar que el evento dragLeave no se activó al entrar en un elemento secundario. Si de alguna manera no verificas que todavía estás dentro del elemento padre, puedes tomar una acción por error que está destinada solo para cuando realmente dejas al padre.
EDITAR: esta es una buena idea, pero no funciona lo suficientemente consistente. Quizás con algunos pequeños ajustes.
fuente
Puede probar
jQuery
si algún div hijo tiene una clase determinada. Luego, al aplicar esa clase cuando pasa el mouse sobre y fuera de un determinado div, puede probar si su mouse está sobre él, incluso cuando pasa el mouse sobre un elemento diferente en la página Mucho menos código de esta manera. Usé esto porque tenía espacios entre divs en una ventana emergente, y solo quería cerrar la ventana emergente cuando me movía fuera de la ventana emergente, no cuando movía mi mouse sobre los espacios en la ventana emergente. Así que llamé a una función de mouseover en el div de contenido (que terminó la ventana emergente), pero solo activaría la función de cierre cuando pasaba el mouse sobre el div de contenido, ¡Y estaba fuera de la ventana emergente!fuente
¡Esta sería la forma más fácil de hacerlo!
fuente
Aquí hay una técnica que no se basa en jquery y utiliza la
matches
API DOM nativa . Utiliza prefijos de proveedor para admitir navegadores que se remontan a IE9. Ver partidosselector en caniuse.com para más detalles.Primero cree la función matchSelector, así:
Luego, para detectar el desplazamiento:
fuente
He respondido esto en otra pregunta, con todos los detalles que pueda necesitar:
Detecta IF al pasar por encima del elemento con jQuery (tiene 99 votos a favor al momento de escribir)
Básicamente, puedes hacer algo como:
Esto funciona solo si
oi
es un objeto jQuery que contiene un solo elemento. Si hay varios elementos coincidentes, debe aplicar a cada elemento, por ejemplo:Esto se probó a partir de jQuery 1.7.
fuente
Aquí hay una función que le ayuda a verificar si el mouse está dentro de un elemento o no. Lo único que debe hacer es llamar a la función donde puede tener un EventObject asociado al mouse en vivo. algo como esto:
Puedes ver el código fuente aquí en github o al final de la publicación:
https://github.com/mostafatalebi/ElementsLocator/blob/master/elements_locator.jquery.js
fuente
Extendiendo lo que dijo 'Happytime harry', asegúrese de usar la función .data () jquery para almacenar el id de tiempo de espera. Esto es para que pueda recuperar la identificación de tiempo de espera muy fácilmente cuando el 'mouseenter' se activa en ese mismo elemento más adelante, lo que le permite eliminar el activador para que desaparezca su información sobre herramientas.
fuente
Puede usar los eventos mouseenter y mouseleave de jQuery. Puede establecer una bandera cuando el mouse ingresa al área deseada y desarmar la bandera cuando sale del área.
fuente
Combiné ideas de este tema y se me ocurrió esto, que es útil para mostrar / ocultar un submenú:
Parece funcionar para mi. Espero que esto ayude a alguien.
EDITAR: ahora me doy cuenta de que este enfoque no funciona correctamente en IE.
fuente
No pude usar ninguna de las sugerencias anteriores.
¿Por qué prefiero mi solución?
Este método verifica si el mouse está sobre un elemento en cualquier momento elegido por usted .
Mouseenter y : hover son geniales, pero mouseenter se activa solo si mueve el mouse, no cuando el elemento se mueve debajo del mouse.
: hover es bastante dulce pero ... IE
Entonces hago esto:
No 1. almacene la posición x, y del mouse cada vez que se mueva cuando lo necesite,
No 2. verifique si el mouse está sobre alguno de los elementos que coinciden con la consulta, haga cosas ... como activar un evento mouseenter
fuente
Solo una nota sobre la popular y útil respuesta de Arthur Goldsmith anterior: si mueve el mouse de un elemento a otro en IE (al menos hasta IE 9), puede tener algunos problemas para que funcione correctamente si el nuevo elemento tiene un Fondo transparente (que sería por defecto). Mi solución fue darle al nuevo elemento una imagen de fondo transparente.
fuente
VIOLÍN
fuente
Puedes usar
is(':visible');
en jquery Y por $ ('. Item: hover') también está funcionando en Jquery.este es un código htm snnipet:
y este es el código JS:
esto es de lo que estaba hablando :)
fuente