Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to hide animated elements on load?

I'm using animate.css with waypoints.js in my landing page. I want to animate elements when user scrolls the page. But, the problem is that I need to hide elements before the animation starts(if i don't hide, animate.css hides element first and then animates in, that looks pretty ugly).

However, I solved problem by adding two classes in my css but it creates another problem.

.visible{ opacity: 1; }
.invisible {opacity: 0; }
// I added following jquery code 
$('elem').removeClass('invisible').addClass('visible fadeInUp');

This works good until I add animation-delay to an elements. Here is an explanation what I want to achieve. I've elements like this:

<ul>
 <li>element1</li>
 <li>element2</li>
 <li>element3</li>
</ul>

I want to add animation delay to each of the elements, so that they fadeInUp after each other with a specified seconds in each of the elements using animation-delay property. I can't get this to work. I tried following code without using animation-delay but no success.

$('elem').each(function() {
  // code with delay using timeout
  setTimeout(function(){
   $(this).removeClass('invisible').addClass('...');
  }, 100);
});

Let me know if my approach is completely wrong? If yes, then can you provide better way to accomplish.

like image 888
Ejaz Karim Avatar asked May 17 '14 08:05

Ejaz Karim


4 Answers

You can hide elements on load and then show and animate them after some delay using CSS and keyframes:

// keyframes fadeIn Animation
@keyframes fadeIn {
    0% {
        transform:scale(0,0);
        visibility:visible;
        opacity:0;
    }
    100% {
        transform:scale(1,1);
        visibility:visible;
        opacity:1;
    }
}
// CSS class
.containerDiv {
    visibility:hidden;
    animation: fadeIn 3s forwards 3s;
}
like image 128
Ateeb Asif Avatar answered Oct 18 '22 16:10

Ateeb Asif


Avoid using !important by stacking classes:

.hidden-load {visibility: hidden;}
.hidden-load.animated {visibility: visible;}
like image 26
isherwood Avatar answered Oct 18 '22 16:10

isherwood


You can do it with only CSS.

Let's say you are trying to animate a title. Give your element's class this css:

.title { visibility: hidden; }

and give the animated class (which comes from the animate.css) this css:

.animated { visibility: visible !important; }

When it hits the waypoints view it will add .animated per animate.css's code and then it will be visible for the animation.

like image 44
user3319362 Avatar answered Oct 18 '22 15:10

user3319362


You can do this with opacities. Add a blank class to the div elements that you will want affect. Once the jquery attaches the animated class with waypoints, you can have bring it back to life with opacity: 1.

.to-be-animated {
  opacity: 0;
}

.to-be-animated.animated {
  opacity: 1;
}
like image 37
PattyCreates Avatar answered Oct 18 '22 14:10

PattyCreates