2016-03-23 6 views
1

Ich habe zwei Divs, die absolut positioniert sind, um aufeinander zu sitzen. Ich versuche nur, eine einfache jQuery-Funktion zu erstellen, die das div oben (.group-fcallout-b) wegblendet, um das darunter liegende (.group-fcallout-a) zu enthüllen.Unendliche Schleife, um ein Div zu verblassen, um div darunter zu offenbaren

Hier ist meine JS:

$(document).ready(function() { 
    InfiniteRotator(); 
}); 

function InfiniteRotator() { 

    var fadeO = setInterval(function() { 
    $('.group-fcallout-b').fadeOut(500); 
    }, 5000); 

    clearInterval(InfiniteRotator); 

    var fadeI = setInterval(function() { 
    $('.group-fcallout-b').fadeIn(500); 
    }, 5000); 
} 

Ich denke, die Frage, die ich im Moment habe, ist, dass fadeIn beginnt unmittelbar nach fadeOut beendet hat - offensichtlich ich eine Verzögerung zwischen den beiden Funktionen will.

JSFiddle-Link: https://jsfiddle.net/02xLjh1y/11/

Vielen Dank!

+0

fadeIn So nennen, wenn die fadeOut abgeschlossen ist? – epascarello

+0

Überprüfen Sie meine [Antwort] (http://StackOverflow.com/A/36180931/4864063) unten - im Zweifel hat jQuery normalerweise bereits eine eingebaute Methode – jmcgriz

Antwort

1

Es ist eigentlich ein Motto:

setInterval(function(){ $('.group-fcallout-b').fadeToggle(500); }, 5000) 

fiddle aktualisiert

0

Ist das für Sie richtig? See this fiddle

Ich habe den Wert des Timeout in der zweiten geändert.

var fadeO = setInterval(function() { 
    $('.group-fcallout-b').fadeOut(500); 
    }, 5000); 

    clearInterval(InfiniteRotator); 

    var fadeI = setInterval(function() { 
    $('.group-fcallout-b').fadeIn(500); 
    }, 10000); 
+0

Vielen Dank! Dies funktioniert - aber ich kann nicht helfen, aber ich denke, es muss eine bessere Lösung sein XD – Natalie

0

Wie wäre es mit ? Hier

$(document).ready(function() { 

    InfiniteRotator(); 

}); 

function InfiniteRotator() { 
    var flag = 1; 

    var fadeOut = function() { 
     $('.group-fcallout-b').fadeOut(500); 
     flag = 0; 
    } 

    var fadeIn = function() { 
     $('.group-fcallout-b').fadeIn(500); 
     flag = 1; 
    } 

    var timer = setInterval(function(){ 
     if(flag) 
      fadeOut(); 
     else 
      fadeIn(); 
    }, 5000); 
} 
2

ist ein Weg, um zu erreichen, was ich denke, ist Ihr Ziel (fiddle here):

$(document).ready(function() { 
    InfiniteRotator(jQuery.fn.fadeOut, jQuery.fn.fadeIn); 
}); 

function InfiniteRotator(fadeFunc, callback) { 
    fadeFunc.call($('.group-fcallout-b'), 500, function() { 
     setTimeout(function() { InfiniteRotator(callback, fadeFunc); }, 1000); 
    }); 
} 

[Edit: hat ein Timeout vor dem anderen Weg Schwund zurück]

Da sowohl fadeIn und fadeOut nehmen ein optionales Callback-Argument, das Sie ausnutzen können, anstatt setInterval zu verwenden.

N.B. Ich weiß nicht, ob Sie interessiert sind oder nicht, aber die Verwendung eines Großbuchstaben 'I' in InfiniteRotator ist ein wenig ungewöhnlich - normalerweise würde der Großbuchstabe bedeuten, dass dies eine Konstruktorfunktion ist, was nicht der Fall ist.

+0

Danke für Ihre Lösung - und ja, die Hauptstadt Ich bin ein Tippfehler XD Das Problem mit diesem ist, dass ich es auf jedem der div Blöcke bevor es ein-/ausblendet. Im Grunde verwandt mit einem Karussell, außer dass es verblasst anstatt zu scrollen (und es werden immer nur diese zwei Blöcke sein). – Natalie

+0

Ich habe die Antwort und die Geige aktualisiert - meinst du das? –

+0

Das ist genial - danke :) Gibt es zusätzlich noch eine Möglichkeit, eine Verzögerung einzustellen, bevor das Fade auftritt? Wörtlich, dass, wenn es mehrere von ihnen auf der Seite gab, sie nicht alle zur gleichen Zeit verblassen (Ich kann es ändern, um mit mehreren Blöcken zu arbeiten, ich brauche nur Hilfe mit der Verzögerung x3). – Natalie

Verwandte Themen