要实现不透明过渡从其当前状态开始,即使它当前正受到过渡的影响,可以使用CSS的transition
属性结合JavaScript来动态计算和应用当前的透明度值。以下是一个详细的解决方案:
假设我们有一个元素,其初始状态为半透明,并且我们希望在用户交互时从当前透明度开始继续过渡。
<div id="myElement" class="element">Hello, World!</div>
.element {
opacity: 0.5;
transition: opacity 1s ease-in-out;
}
document.getElementById('myElement').addEventListener('click', function() {
var element = this;
var currentOpacity = window.getComputedStyle(element).opacity;
// 设置一个新的透明度值,这里假设我们要完全透明
element.style.opacity = 0;
// 使用setTimeout确保浏览器已经应用了新的样式
setTimeout(function() {
element.style.transition = 'none'; // 禁用过渡以立即应用新值
element.style.opacity = currentOpacity; // 恢复到当前透明度
element.offsetHeight; // 触发重排
element.style.transition = 'opacity 1s ease-in-out'; // 重新启用过渡
element.style.opacity = 0; // 开始新的过渡
}, 50);
});
window.getComputedStyle(element).opacity
获取元素当前的透明度值。transition: none
来禁用过渡效果,以便立即应用新的透明度值。offsetHeight
属性来强制浏览器重新计算布局,确保新的透明度值被应用。transition
属性以启用过渡效果,并开始新的过渡动画。这种方法确保了无论元素当前的透明度如何,过渡都会从其当前状态开始,而不是从头开始。