jQuery Fadeout bei Klick oder nach Verzögerung

7

Ich zeige ein Meldungsfeld auf einer Website an. Ich möchte es entweder auf Klick oder nach X Sekunden ausblenden lassen. Das Problem ist, dass die delay() -Funktion den Platz über der click() -Funktion übernimmt, was es so macht, selbst wenn Sie auf "Schließen" klicken, müssen Sie immer noch die Zeit warten.

Hier ist die jQuery

%Vor%

Ich habe auch ein einfaches Spiel aufgebaut. Um das Problem zu sehen, kommentieren Sie die Verzögerungslinie Ссылка

    
BandonRandon 17.03.2011, 21:56
quelle

3 Antworten

22

Sie sollten es in ein setTimeout ändern: Ссылка

(im jsfiddle-Link) Ich habe Ihre Verzögerungslinie entfernt und sie durch eine Standard setTimeout like:

ersetzt %Vor%

Als Hinweis auf WARUM: JS wird von oben nach unten gelesen und liest Ihre Verzögerung, bevor Sie auf das Ereignis klicken und es auslösen. Daher wird selbst beim Klicken auf die Verzögerung ausgeführt, wodurch alle Animationen angehalten werden.

    
Oscar Godson 17.03.2011, 21:59
quelle
6

Dies wäre eine ideale Verwendung für die neuen Deferred -Objekte von jQuery 1.5:

%Vor%

Arbeitsdemo in Ссылка

Beachten Sie, dass es nicht wichtig ist, dass wenn Sie die Taste drücken, der Timer weiterhin ausgelöst wird - der zweite Aufruf von def.resolve() wird ignoriert.

    
Alnitak 17.03.2011 22:28
quelle
1

Ich finde es die beste von Oscar Godson vorgeschlagene Umgehungslösung, die ich irgendwie hinzugefügt habe:

%Vor%

Sein ursprünglicher Vorschlag ist sehr nützlich:

Sie sollten es in ein setTimeout ändern: Ссылка

(im jsfiddle-Link)       Ich habe Ihre Verzögerungslinie entfernt und sie durch ein Standard-setTimeout wie:

ersetzt %Vor%

Von Oscar Godson,

    
Peter Manoukian 24.09.2014 13:37
quelle

Tags und Links