2012-06-29 7 views
24

Aquí hay una función de diapositivas jQuery que he aplicado a un div en vuelo estacionario para deslizar un botón hacia abajo.Si el mouse se pasa por más de 2 segundos, entonces, ¿qué no?

Funciona bien, excepto que ahora cada vez que alguien se mueve dentro y fuera de él, sigue subiendo y bajando.

Pensé que si ponía un temporizador de retardo de uno o dos segundos tendría más sentido.

¿Cómo modificaría la función para ejecutar la diapositiva hacia abajo solo si el usuario está en el div durante más de un segundo o dos?

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js "></script> 
<script type="text/javascript"> 

$("#NewsStrip").hover(
function() { 
    $("#SeeAllEvents").slideDown('slow'); }, 
function() { 
    $("#SeeAllEvents").slideUp('slow'); 
}); 

</script> 
+0

duplicado exacto de [ jQuery - ¿Cómo decirle a .hover() que espere?] (http://stackoverflow.com/questions/1089246/jquery-how-to-tell-hover-to-wait) –

+0

@TJCrowder si lee la pregunta, entonces el OP no está preguntando exactamente eso. –

+0

@ThomasClayson: Aparentemente lo son. La misma pregunta, la misma respuesta aceptada. –

Respuesta

55

Es necesario configurar un temporizador en mouseover y claro, bien cuando la tapa está activado o al desplazar el ratón, lo que ocurra primero:

var timeoutId; 
$("#NewsStrip").hover(function() { 
    if (!timeoutId) { 
     timeoutId = window.setTimeout(function() { 
      timeoutId = null; // EDIT: added this line 
      $("#SeeAllEvents").slideDown('slow'); 
     }, 2000); 
    } 
}, 
function() { 
    if (timeoutId) { 
     window.clearTimeout(timeoutId); 
     timeoutId = null; 
    } 
    else { 
     $("#SeeAllEvents").slideUp('slow'); 
    } 
}); 

See it in action.

+0

@xDazz Gracias jon y xDazz. El deslizamiento hacia abajo funciona maravillosamente, pero no se desliza hacia atrás con el mouse hacia afuera. ¿Me estoy perdiendo o haciendo algo mal? – user1266515

+0

Intenta eliminar los bloques 'if'' else' en la segunda función. Realmente no los necesitas. Llamar a esos métodos de esa manera no tendrá ningún efecto perjudicial si elimina el 'if else'. Y es probable que por eso no se deslice de nuevo. :) –

+0

@ThomasClayson Bueno, ahora se desliza hacia abajo y hacia arriba una sola vez y luego se vuelve inactivo. Extraño – user1266515

3
var time_id; 

$("#NewsStrip").hover(
function() { 
    if (time_id) { 
     clearTimeout(time_id); 
    } 
    time_id = setTimeout(function() { 
     $("#SeeAllEvents").stop(true, true).slideDown('slow'); 
    }, 2000); 
}, function() { 
    if (time_id) { 
     clearTimeout(time_id); 
    } 
    time_id = setTimeout(function() { 
     $("#SeeAllEvents").stop(true, true).slideUp('slow'); 
    }, 2000); 
}); 
Cuestiones relacionadas