我正在实现一个具有一些隐藏内容的组件,通过单击按钮即可显示。我想对max-height显示的内容进行转换,如下所示:
<button id="show-hide">Toggle content</button>
<div id="revealable-content" class="content is-collapsed">
Content to be revealed
<a href="https://www.example.com">with a link</a>
</div>
.content {
overflow: hidden;
height: auto;
max-height: 200px;
width: 200px;
background-color: darkgray;
transition: max-height 1000ms;
}
.content.is-collapsed {
max-height: 0
}
const button = document.getElementById('show-hide')
const content = document.getElementById('revealable-content')
let hidden = true
button.addEventListener('click', () => {
hidden = !hidden
if (hidden) {
content.classList.add('is-collapsed')
} else {
content.classList.remove('is-collapsed')
}
})
到目前为止,一切都很好。现在我想让它更容易访问,所以我hidden向内容 div 添加一个属性,并在我知道动画已执行后将其设置为 true 或 false setTimeout:
// at the bottom of the event handler...
setTimeout(() => {
content.hidden = hidden
}, 1000)
这破坏了“展开”动画,但奇怪的是却没有破坏“折叠”动画。折叠时,过渡动画按预期运行 1 秒。但是,在展开时,max-height会立即应用,无需过渡。
请参阅此 codepen的演示。
这是怎么回事?我该如何解决?
繁星点点滴滴
梦里花落0921
侃侃尔雅
慕田峪7331174
相关分类