No estoy buscando una acción para llamar al pasar el ratón, sino una forma de saber si un elemento se está pasando por encima actualmente. Por ejemplo:
$('#elem').mouseIsOver(); // returns true or false
¿Existe un método jQuery que logre esto?
javascript
jquery
James Skidmore
fuente
fuente
Respuestas:
Respuesta original (y correcta):
Puede usar
is()
y verificar el selector:hover
.Ejemplo: http://jsfiddle.net/Meligy/2kyaJ/3/
(Esto solo funciona cuando el selector coincide con UN elemento como máximo. Consulte Editar 3 para obtener más información)
.
Edición 1 (29 de junio de 2013): (Aplicable solo a jQuery 1.9.x, ya que funciona con 1.10+, consulte la siguiente Edición 2)
Esta respuesta fue la mejor solución en el momento en que se respondió la pregunta. Este selector ': hover' se eliminó con el
.hover()
método de eliminación en jQuery 1.9.x.Curiosamente, una respuesta reciente de "allicarn" muestra que es posible usarlo
:hover
como selector CSS (frente a Sizzle) cuando lo prefijas con un selector$($(this).selector + ":hover").length > 0
, ¡y parece que funciona!Además, el complemento hoverIntent mencionado en otra respuesta también se ve muy bien.
Edición 2 (21 de septiembre de 2013):
.is(":hover")
funcionaBasado en otro comentario, noté que la forma original en que publiqué
.is(":hover")
, en realidad todavía funciona en jQuery, entonces.Funcionó en jQuery 1.7.x.
Dejó de funcionar en 1.9.1, cuando alguien me lo informó, y todos pensamos que estaba relacionado con jQuery eliminando el
hover
alias para el manejo de eventos en esa versión.Funcionó nuevamente en jQuery 1.10.1 y 2.0.2 (quizás 2.0.x), lo que sugiere que la falla en 1.9.x fue un error o no un comportamiento intencional como pensamos en el punto anterior.
Si desea probar esto en una versión particular de jQuery, simplemente abra el ejemplo de JSFidlle al comienzo de esta respuesta, cambie a la versión de jQuery deseada y haga clic en "Ejecutar". Si el color cambia al pasar el mouse, funciona.
.
Edición 3 (9 de marzo de 2014): solo funciona cuando la secuencia jQuery contiene un único elemento
Como lo mostró @Wilmer en los comentarios, tiene un violín que ni siquiera funciona contra las versiones de jQuery con las que yo y otros aquí lo probamos. Cuando traté de encontrar lo especial de su caso, noté que estaba tratando de verificar múltiples elementos a la vez. Esto fue arrojar
Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: hover
.Entonces, trabajando con su violín, esto NO funciona:
Si bien esto DOES trabajo:
También funciona con secuencias jQuery que contienen un solo elemento, como si el selector original coincidiera con un solo elemento, o si llamara
.first()
a los resultados, etc.Esto también se menciona en mi Boletín de recursos y sugerencias de desarrollo web de JavaScript + .
fuente
Syntax Error, unrecognized expression: hover. jquery-1.7.js line 4179
.Utilizar:
jQuery 1.9+
fuente
No funciona en jQuery 1.9. Hizo este complemento basado en la respuesta del usuario 2444818.
http://jsfiddle.net/Wp2v4/1/
fuente
Establecer una bandera al pasar el ratón:
Entonces solo revisa tu bandera.
fuente
mouseleave
un elemento, quiero verificar si el mouse ingresó a otro elemento en particular.e.fromElement
ye.toElement
. ¿Funcionará para ti?.data()
.Un par de actualizaciones para agregar después de trabajar en este tema por un tiempo:
Utilizamos hoverIntent https://github.com/briancherne/jquery-hoverIntent para resolver el problema por nosotros. Esencialmente, se dispara si el movimiento del mouse es más deliberado. (Una cosa a tener en cuenta es que activará tanto el mouse que ingresa un elemento como si se va, si solo desea usar una pasada, el constructor una función vacía)
fuente
Puede filtrar su elemento de todos los elementos suspendidos. Código problemático
Guardar código:
Para devolver booleano:
fuente
La respuesta aceptada no funcionó para mí en JQuery 2.x
.is(":hover")
devuelve falso en cada llamada.Terminé con una solución bastante simple que funciona:
fuente
Ampliando la respuesta de @ Mohamed. Podrías usar un poco de encapsulación
Me gusta esto:
Úselo como:
Bifurcado el violín: http://jsfiddle.net/cgWdF/1/
fuente
Me gusta la primera respuesta, pero para mí es raro. Cuando intento verificar justo después de cargar la página para el mouse, tengo que poner al menos un retraso de 500 milisegundos para que funcione:
http://codepen.io/molokoloco/pen/Grvkx/
fuente
Establecer una bandera por la respuesta de kinakuta parece razonable, puede poner un oyente en el cuerpo para que pueda verificar si algún elemento se desplaza en un instante en particular.
Sin embargo, ¿cómo quiere lidiar con los nodos secundarios? Tal vez debería verificar si el elemento es un ancestro del elemento actualmente suspendido.
fuente