2012-06-29 13 views
24

Hier ist eine jQuery-Folie-Funktion, die ich auf ein div auf Hover angewendet habe, um eine Taste nach unten zu schieben.Wenn die Maus länger als 2 Sekunden gedrückt wird, dann zeige sonst nicht?

Es funktioniert gut, außer dass jetzt jedes Mal, wenn jemand ein- und aussteigt, es auf und ab wippt.

Ich dachte, wenn ich einen ein oder zwei Sekunden Delay-Timer auf ihn setzen würde es mehr Sinn machen.

Wie würde ich die Funktion ändern, um die Folie nur dann herunterzufahren, wenn der Benutzer für mehr als ein oder zwei Sekunden auf dem Div ist?

<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

exaktes Duplikat [ jQuery - Wie zu sagen .hover() zu warten?] (http://stackoverflow.com/questions/1089246/jquery-how-to-tell-hover-to-wait) –

+0

@TJCrowder wenn Sie die Frage dann lesen Das OP fragt nicht genau danach. –

+0

@ThomasClayson: Anscheinend sind sie. Gleiche Frage, gleiche akzeptierte Antwort. –

Antwort

55

Sie benötigen einen Timer mit der Maus darüber setzen und löschen sie entweder, wenn der Schieber aktiviert ist oder auf mouseout je nachdem, welcher Fall zuerst eintritt:

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 Danke jon und xDazz. Der Slide-Down funktioniert wunderbar, aber er rutscht nicht mit der Maus nach oben? Vermisse ich etwas oder mache ich etwas falsch? – user1266515

+0

Versuchen Sie, die 'if'' else' Blöcke in der zweiten Funktion loszuwerden. Du brauchst sie nicht wirklich. Der Aufruf solcher Methoden hat keine nachteiligen Auswirkungen, wenn Sie das 'if else' entfernen. Und es ist wahrscheinlich, warum es nicht wieder hochgleitet. :) –

+0

@ThomasClayson Naja, jetzt rutscht es nur einmal runter und hoch und wird dann inaktiv.Komisch – 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); 
});