jQuery Fadeout auf Klicken oder nach Verzögerung
Ich bin die Anzeige einer message-box auf einer website. Ich möchte in der Lage sein, um es entweder fadeout auf Mausklick oder nach X Sekunden. Das problem ist, dass die delay()
Funktion erfolgt über die click()
Funktion, es so zu machen, auch wenn Sie auf schließen klicken, haben Sie immer noch warten, die Zeit.
Hier ist die jQuery
$(document).ready(function() {
$(".close-green").click(function () {
$("#message-green").fadeOut("slow");
});
//fade out in 5 seconds if not closed
$("#message-green").delay(5000).fadeOut("slow");
})
Ich auch eine einfache jsfiddle. Um das problem auskommentieren der delay-line http://jsfiddle.net/BandonRandon/VRYBk/1/
- mögliche Duplikate von Verzögerung JQuery effects
- das ist nicht einmal annähernd das gleiche. Die person möchte wissen, WIE die Verzögerung eine animation, die die OP schon weiß, wie aber will man wissen, wie um zu verhindern, dass die Verzögerung, wenn ein Ereignis stattfindet, bevor die Verzögerung beendet ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern Sie es zu einem
setTimeout
:http://jsfiddle.net/VRYBk/3/
(in der jsfiddle-link)
Ich entfernt Ihre-delay-Zeile und ersetzt es mit einem standard -
setTimeout
wie:Als Hinweis, WARUM, ist, weil JS ist zu Lesen von oben nach unten und werde es Lesen, Ihre Verzögerung, bevor Sie klicken, und das Ereignis auszulösen. Deshalb, auch wenn Sie auf die Verzögerung ausgeführt wird, so dass der ganze animation zu pausieren.
Wäre dies ein Idealer Einsatz für jQuery 1.5 die neue Latente Objekte:
Arbeiten demo auf http://jsfiddle.net/Nyg4y/3/
Beachten Sie, dass es egal ist, dass, wenn Sie die Taste drücken Sie die timer noch feuert - der zweite Aufruf
def.resolve()
ignoriert.Ich Quelle es der beste workaround vorgeschlagen von Oscar Patenkind, habe ich irgendwie das dies nur Hinzugefügt, um es:
Seine ursprüngliche Vorschlag ist sehr nützlich:
Ändern Sie es zu einem setTimeout: http://jsfiddle.net/VRYBk/3/
(in der jsfiddle-link)
Ich entfernt Ihre-delay-Zeile und ersetzt es mit einem standard setTimeout wie:
Durch Oscar Patenkind,