2016-12-18 2 views
0

Ich habe einen einfachen Regenbogen in SCSS & jQuery erstellt und es funktioniert gut, nur einmal. Kann mir jemand sagen, warum es nicht mehrmals ausgeführt wird?Kann mir jemand sagen, warum das einmal funktioniert?

JS

function Raibow() { 
    $('#rainbow').show(); 

    setTimeout(function() { 
    $('#rainbow .rainbow').addClass('rainbow-effect'); 
    }, 100); 

    $n = 5; $('#rainbow-timing').text($n); 
    setTimeout(function() { 
    $('#rainbow-message').show('fade', 400); 
    }, 900); 

    setTimeout(function() { 
    function count() { 
     $n--; 
     if ($n <= 0) { 
     $('#rainbow-message').hide('fade', 400); 
     $('#rainbow .rainbow').removeClass('rainbow-effect'); 
     setTimeout(function() { 
      $('#rainbow-timing').text($n); 
     }, 200); 
     setTimeout(function() { 
      $('#rainbow').hide(); 
     }, 1000); 
     clearInterval($n); 
     return; 
     } 
     $('#rainbow-timing').text($n); 
    } 
    setInterval(count, 1000); 
    }, 1400); 
} 

$('button').click(Raibow); 

Es ist ein Problem jQuery? Oder die Animation funktioniert seltsam?

+0

Was erwarten Sie passieren? Momentan wird es animiert, wenn die Schaltfläche angeklickt wird und nach einer Verzögerung in einen Verbergen-Zustand animiert wird. Es wird nicht wiederholt, weil das Intervall, das die Animation auslöst, gelöscht wird (also nicht mehr ausgelöst wird), wenn die Animation abgeschlossen ist. – Pineda

+0

Und meine Frage ist: Was habe ich mit diesem "Intervall" zu tun? Alles was ich möchte ist, dass dieser Regenbogen-Effekt jedes Mal wiederholt wird, wenn ich auf den Knopf klicke. – Deny

Antwort

1

Sie löschen das Intervall nicht ordnungsgemäß.

Gemäß der Dokumente

Der zurück timeoutID ist ein numerischer, nicht-Null-Wert, der den Zeitgeber durch den Aufruf von setInterval() erstellt identifiziert; Dieser Wert kann an Window.clearInterval() übergeben werden, um das Zeitlimit abzubrechen.

https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval

so müssen Sie die timeoutID passieren refreshIntervalId in das unten stehende Beispiel clearInterval()

var refreshIntervalId; 

    function count() { 
     $n--; 
     if ($n <= 0) { 
     $('#rainbow-message').hide('fade', 400); 
     $('#rainbow .rainbow').removeClass('rainbow-effect'); 
     setTimeout(function() { 
      $('#rainbow-timing').text($n); 
     }, 200); 
     setTimeout(function() { 
      $('#rainbow').hide(); 
     }, 1000); 
     clearInterval(refreshIntervalId); 
     return; 
     } 
     $('#rainbow-timing').text($n); 
    } 

    setTimeout(function() { 
    refreshIntervalId = setInterval(count, 1000); 
    }, 1400); 

Fiddle: https://jsfiddle.net/405zqzef/

+0

Funktionsdeklaration gehört nicht in 'setTimeout' – charlietfl

Verwandte Themen