Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JQuery fade with loop and delay

Tags:

jquery

loops

fade

I have 2 Divs stacked on top of each other.

I need a really simple function that will:

a) Wait for 3 seconds and then b) FadeOut the top Div to reveal the second Div c) Wait 3 seconds again and then d) FadeIn the top Div again e) Loop back again

Can anyone offer any advice?

Many thanks

like image 433
Martin Avatar asked Dec 08 '22 06:12

Martin


2 Answers

Here's an attempt.

function foo() {
    jQuery("#mydiv").animate({opacity: 1.0}, {duration: 3000})
        .animate({opacity: 0}, {duration: 3000})
        .animate({opacity: 0}, {duration: 3000})
        .animate({opacity: 1.0}, {duration: 3000, complete: foo})
}

Note: To pause, just call animate over a property with the same target value as it is right now. The last animate calls the the same function as callback.

PS: Does it cause stack overflow over time?

like image 52
Chetan S Avatar answered Dec 09 '22 19:12

Chetan S


if the two divs have ids of "id1" and "id2", and id2 is the upper one then the code would be like:

function fadeIn() {
  $("id2").animate({opacity:0},500);
  setTimeout(fadeOut,3500);
}

function fadeOut() {
  $("id2").animate({opacity:1},500);
  setTimeout(fadeIn,3500);
}

function startAnim() {
  setTimeout(fadeIn,3000);
}

startAnim() starts the animation cycle , which you should call @ the start. Then fadeIn & Out keep animating id2 and setting timeouts for each other. The delay is 3500 , as you wanted 3 seconds of delay (ie. 3000ms) and 500 for the previous animation to complete. This could have been done using a callback on animate , but that's more messy.

like image 44
aviraldg Avatar answered Dec 09 '22 20:12

aviraldg