我正在尝试在Javascript and without librairies or css
中重新启动transition
。我不想用Settimeout
或clientHeight
这样的技巧来实现这一点。我知道这是因为回流,但我正在尝试找到理想的解决方案。
步骤如下:
1)Remove
转换-〉设置新位置(without
转换)
2)Add
过渡-〉设置新位置(with
动画)
这是Javascript。
let element1 = document.querySelector(".box")
document.querySelector("button").onclick = () => {
element1.style.transition = "none"
element1.style.transform = "translateY(50px)"
element1.style.transition = "all 0.4s";
element1.style.transform = "translateY(10px)"
}
现在只是做过渡和移动10px,而不是设置50px的位置第一。
2条答案
按热度按时间xoshrz7s1#
您的代码不起作用,因为浏览器不会重新计算第一次和第二次"批量"更新之间的样式。
一个技巧是通过调用其中一个函数来强制浏览器重新计算它们,例如,我将使用
getBoundingClientRect
,因为浏览器需要计算样式来获得元素的大小和位置。因此:
hmae6n7t2#
您可以将EventListener添加到transitionEnd事件,然后更改该类:
如果你不想使用这个类,你仍然可以使用这个结构来改变你的样式。
在你第一次点击的时候你开始了过渡