请尝试运行以下代码段,然后单击相应的框。
const box = document.querySelector('.box')
box.addEventListener('click', e => {
if (!box.style.transform) {
box.style.transform = 'translateX(100px)'
new Promise(resolve => {
setTimeout(() => {
box.style.transition = 'none'
box.style.transform = ''
resolve('Transition complete')
}, 2000)
}).then(() => {
box.style.transition = ''
})
}
})
.box {
width: 100px;
height: 100px;
border-radius: 5px;
background-color: #121212;
transition: all 2s ease;
}
<div class = "box"></div>
我期望发生的事情:
- 点击发生
- 盒子开始水平平移100像素(此操作需要两秒钟)
- 单击时,
Promise
还将创建一个新的。里面说Promise
,setTimeout
功能设置为2秒 - 操作完成后(经过两秒钟),
setTimeout
运行其回调函数并将其设置transition
为none。完成此操作后,setTimeout
还将还原transform
为原始值,从而使该框显示在原始位置。 - 该框出现在原始位置,此处没有过渡效果问题
- 完成所有这些操作后,将
transition
框的值设置回其原始值
但是,可以看出,该transition
值none
在运行时似乎不是。我知道还有其他方法可以实现上述目的,例如使用关键帧和transitionend
,但是为什么会发生这种情况?我明确设置transition
回其原始值仅之后的setTimeout
完成它的回调,从而解决的前景。
编辑