display:本身不支持动画,必须结合opacity实现动画效果:
代码:
<!DOCTYPE html>
<html>
<head>
<style>
.item {
opacity: 1;
transition: opacity 0.5s linear;
}
.item-display {
display: none;
}
.item-opacity{
opacity: 0;
}
</style>
</head>
<body>
<h1 class="item">Hello World!</h1>
<button onclick="toggle()">Show</button>
</body>
<script>
// 切换动画函数
function toggle(){
if (document.querySelector('.item').classList.contains('item-display')) {
document.querySelector('.item').classList.remove('item-display')
// 这里是关键:display和opacity同时执行,动画无法正常执行,必须设置1个时间间隔,只要大于0就行
setTimeout(function(){
document.querySelector('.item').classList.remove('item-opacity')
},1)
} else {
document.querySelector('.item').classList.add('item-opacity')
setTimeout(function(){
document.querySelector('.item').classList.add('item-display')
},500)
}
}
</script>
</html>