Jacob
Jacob

Reputation: 4031

Javascript native implementation div display/hide with animate

I am looking for a native JS solution to toggle div display using display:'none' and display:'block' properties. I have the first part done. I only need the part to do a simple fadeIn and fadeOut animation.

I need to use native JS and display:block,none.

var e = document.getElementById('calendarPickerContainer');

    if (e.className == 'visible') { 
        e.className = 'hidden';
    } else {
        e.className = 'visible';
    }

need to adapt to this css

.visible{
display:block;
}

.hidden {
display:none;
}

Upvotes: 0

Views: 3495

Answers (4)

Praveen Kumar Purushothaman
Praveen Kumar Purushothaman

Reputation: 167182

If you wanna use a pure JavaScript fadeIn and fadeOut, try this:

transition: opacity 1s linear;

This is a pure CSS method.

#cont {-webkit-transition: opacity 1s linear; -o-transition: opacity 1s linear; transition: opacity 1s linear;}
#cont.hidden {opacity: 0;}
<button onclick="cont.classList.add('hidden'); setTimeout('cont.style.display=\'none\'', 1000);">Click</button>
<div id="cont">
  Hello
</div>

Working Snippet (includes toggle):

#cont {-webkit-transition: opacity 1s linear; -o-transition: opacity 1s linear; transition: opacity 1s linear; opacity: 1;}
#cont.hidden {opacity: 0; -webkit-transition: opacity 1s linear; -o-transition: opacity 1s linear; transition: opacity 1s linear;}
<button onclick="if (cont.style.display != 'none') { cont.classList.add('hidden'); setTimeout('cont.style.display=\'none\'', 1000); } else {cont.style.display='block'; setTimeout('cont.classList.remove(\'hidden\')', 10);}">Click</button>
<div id="cont">
  Hello
</div>

Upvotes: 3

Antonio Smoljan
Antonio Smoljan

Reputation: 2207

You can simplfy this with classList

document.querySelector('.toggle').addEventListener('click',function(e) {
  e.target.classList.toggle('hide');
})

Css:

div {
  transition:all 0.3s ease-in;
}

.hide {

  opacity: 0;
}

We're using opacity since display cannot be animated.

Example

Upvotes: 0

Przemek
Przemek

Reputation: 803

Native JS fade function:

var s = document.getElementById('calendarPickerContainer').style;
s.opacity = 1;
(function fade(){(s.opacity-=.1)<0?s.display="none":setTimeout(fade,40)})();

Upvotes: 0

Shreyas
Shreyas

Reputation: 1462

You can achieve this easily with CSS3

.visible {
  visibility: visible;
  opacity: 1;
  transition: opacity 2s linear;
}
.hidden {
  visibility: hidden;
  opacity: 0;
  transition: visibility 0s 2s, opacity 2s linear;
}

Upvotes: 0

Related Questions