¿Cómo verifico si el mouse está sobre un elemento en jQuery?

Resuelto Steve Wortham asked hace 15 años • 26 respuestas

¿Existe alguna forma rápida y sencilla de hacer esto en jQuery que me falta?

No quiero usar el evento del mouseover porque ya lo estoy usando para otra cosa. Sólo necesito saber si el mouse está sobre un elemento en un momento dado.

Me gustaría hacer algo como esto, si tan solo hubiera una función "IsMouseOver":

function hideTip(oi) {
    setTimeout(function() { if (!IsMouseOver(oi)) $(oi).fadeOut(); }, 100);
}
Steve Wortham avatar Aug 14 '09 00:08 Steve Wortham
Aceptado

Una verificación de desplazamiento limpia y elegante:

if ($('#element:hover').length != 0) {
    // do something ;)
}
Ivo avatar Nov 14 '2012 16:11 Ivo

Este código ilustra lo que happytime harry y yo intentamos decir. Cuando el mouse entra, sale una información sobre herramientas, cuando el mouse sale establece un retraso para que desaparezca. Si el mouse ingresa al mismo elemento antes de que se active el retraso, entonces destruimos el disparador antes de que suene usando los datos que almacenamos antes.

$("someelement").mouseenter(function(){
    clearTimeout($(this).data('timeoutId'));
    $(this).find(".tooltip").fadeIn("slow");
}).mouseleave(function(){
    var someElement = $(this),
        timeoutId = setTimeout(function(){
            someElement.find(".tooltip").fadeOut("slow");
        }, 650);
    //set the timeoutId, allowing us to clear this trigger if the mouse comes back over
    someElement.data('timeoutId', timeoutId); 
});
Arthur Goldsmith avatar Nov 03 '2009 22:11 Arthur Goldsmith

ADVERTENCIA: is(':hover')está en desuso en jquery 1.8+. Consulte esta publicación para encontrar una solución.

También puede usar esta respuesta: https://stackoverflow.com/a/6035278/8843 para probar si el mouse está sobre un elemento:

$('#test').click(function() {
    if ($('#hello').is(':hover')) {
        alert('hello');
    }
});
tal avatar Mar 01 '2012 09:03 tal