Javascript本机实现div显示/隐藏动画

时间:2015-11-27 11:43:20

标签: javascript html css display

我正在寻找一个原生的JS解决方案来使用display来切换div显示:'none'和display:'block'属性。我完成了第一部分。我只需要部分来做一个简单的fadeIn和fadeOut动画。

我需要使用原生JS并显示:block,none。

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

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

需要适应这个css

.visible{
display:block;
}

.hidden {
display:none;
}

4 个答案:

答案 0 :(得分:1)

如果您想使用纯JavaScript fadeInfadeOut,请尝试以下操作:

transition: opacity 1s linear;

这是一个纯CSS方法。

#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>

工作代码段(包括切换):

#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>

答案 1 :(得分:0)

您可以使用CSS3轻松实现此目的

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

答案 2 :(得分:0)

原生JS淡入淡出功能:

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

答案 3 :(得分:0)

您可以使用classList

简化此操作
document.querySelector('.toggle').addEventListener('click',function(e) {
  e.target.classList.toggle('hide');
})

的CSS:

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

.hide {

  opacity: 0;
}

我们正在使用opacity,因为display无法设置动画。

Example