这是最小的可复制的例子。"切换"悬停的过渡结束是发射(我不想)和隐藏"a"过早。
要重现,请在过渡结束后单击切换。
我意识到发生这种情况是因为toggle在一个内部(我不能改变它)。有没有办法在toggle上停止transitionend(不检测发生了哪个转换)。
它变得太复杂了,发现过渡结束的bug,我宁愿使用setTimeout(这对css过渡来说有点荒谬)。
var a = document.querySelector('.a')
a.style.display = 'block'
setTimeout(function() {
a.classList.add('visible')
}, 50)
document.querySelector('.toggle').addEventListener('click', function() {
console.log('click')
a.addEventListener('transitionend', function cb(e) {
console.log('end')
a.style.display = 'none'
})
a.classList.remove('visible')
})
.a {
position: relative;
width: 200px;
height: 200px;
background: red;
left: 200px;
display: none;
transition: left 1s;
}
.visible {
left: 0;
}
.toggle {
transition: color 0.2s;
}
.toggle:hover {
color: #fff;
}
<div class="a">
<div class="toggle">
toggle
</div>
</div>
2条答案
按热度按时间vwoqyblh1#
使用关键帧动画根本不需要JavaScript,只需指定结束状态,并确保将填充模式设置为
forwards
,这样结束状态就不会重置。dhxwm5r42#
您可以在toggle元素上检测到过渡结束,并阻止它向上传播到a元素。