如果有过渡,如何立即更改子项的可见性 属性
How to instantly change the visibility property of child if it has a transition
我有这个 html-标记。我用 class“open-window”制作了一个按钮,它会打开一个弹出窗口 window。这个 window 可以通过按下按钮 class "close-window" 来关闭,当你悬停在这个按钮上时,它的背景会随着时间而改变。单击此按钮后,window 变为不可见,但按钮仍然可见 0.4s(过渡)。
如何在点击后立即隐藏这个按钮而不删除它的背景变化?
<h3>Block title</h3>
<p>
Block text.Block text.Block text.Block text.Block text.Block text.
</p>
<button class="open-window">Learn more</button>
<div class="window hidden">
<button class="close-window">
<span>×</span>
</button>
<h3>Block2 title</h3>
<p>
Block2 text.Block2 text.Block2 text.Block2 text.Block2 text.
</p>
<a href="" class="window-button">
<button>Go to somewhere</button>
</a>
</div>
</div>
<style>
.hidden{
visibility: hidden;
}
.window{
display: flex;
flex-direction: column;
height: 250px;
background: lightgray;
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border-radius: 20px;
padding: 10px;
}
.close-window {
position: fixed;
background: green;
right: 20px;
top: 20px;
width: 30px;
height: 30px;
border: black solid;
border-radius: 50%;
}
.close-window:hover{
background: blue;
transition: 0.4s;
}
</style>
<script>
let openButtons = document.getElementsByClassName('open-window');
let closeButtons = document.getElementsByClassName('close-window');
for (let i = 0; i < openButtons.length; i++) {
openButtons[i].addEventListener('click', ()=>{
openButtons[i].nextElementSibling.classList.toggle("hidden");
})
}
for (let i = 0; i < closeButtons.length; i++) {
closeButtons[i].addEventListener('click', ()=>{
closeButtons[i].parentElement.classList.add("hidden");
})
}
</script>
我不确定在这里使用可见性,但我知道为什么 display:none 在这里不起作用。如果我将 display:none 设置为 class“隐藏”,则在加载页面后弹出 window 可见并且无法关闭。
使用 transition: 0.4s;
时,您正在对 所有 发生值变化的可转换属性应用转换 - visibility
就是其中之一。
在这种情况下,最简单的解决方法可能是,您只需明确指定要转换的 属性,
transition: background 0.4s;
然后 visibility
属性 的更改可以立即应用。
我有这个 html-标记。我用 class“open-window”制作了一个按钮,它会打开一个弹出窗口 window。这个 window 可以通过按下按钮 class "close-window" 来关闭,当你悬停在这个按钮上时,它的背景会随着时间而改变。单击此按钮后,window 变为不可见,但按钮仍然可见 0.4s(过渡)。
如何在点击后立即隐藏这个按钮而不删除它的背景变化?
<h3>Block title</h3>
<p>
Block text.Block text.Block text.Block text.Block text.Block text.
</p>
<button class="open-window">Learn more</button>
<div class="window hidden">
<button class="close-window">
<span>×</span>
</button>
<h3>Block2 title</h3>
<p>
Block2 text.Block2 text.Block2 text.Block2 text.Block2 text.
</p>
<a href="" class="window-button">
<button>Go to somewhere</button>
</a>
</div>
</div>
<style>
.hidden{
visibility: hidden;
}
.window{
display: flex;
flex-direction: column;
height: 250px;
background: lightgray;
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border-radius: 20px;
padding: 10px;
}
.close-window {
position: fixed;
background: green;
right: 20px;
top: 20px;
width: 30px;
height: 30px;
border: black solid;
border-radius: 50%;
}
.close-window:hover{
background: blue;
transition: 0.4s;
}
</style>
<script>
let openButtons = document.getElementsByClassName('open-window');
let closeButtons = document.getElementsByClassName('close-window');
for (let i = 0; i < openButtons.length; i++) {
openButtons[i].addEventListener('click', ()=>{
openButtons[i].nextElementSibling.classList.toggle("hidden");
})
}
for (let i = 0; i < closeButtons.length; i++) {
closeButtons[i].addEventListener('click', ()=>{
closeButtons[i].parentElement.classList.add("hidden");
})
}
</script>
我不确定在这里使用可见性,但我知道为什么 display:none 在这里不起作用。如果我将 display:none 设置为 class“隐藏”,则在加载页面后弹出 window 可见并且无法关闭。
使用 transition: 0.4s;
时,您正在对 所有 发生值变化的可转换属性应用转换 - visibility
就是其中之一。
在这种情况下,最简单的解决方法可能是,您只需明确指定要转换的 属性,
transition: background 0.4s;
然后 visibility
属性 的更改可以立即应用。