【发布时间】:2021-11-03 00:40:39
【问题描述】:
我正在尝试对挂载钩子中的元素应用一些内联样式,作为过渡的起点。
mounted() {
this.styles = {
backgroundColor: 'silver'
};
在那之后,在下一个刻度上,我想添加一组新样式,并让过渡发生
this.$nextTick(() => {
this.styles = {
backgroundColor: 'gold'
}
});
}
这并不像我期望的那样工作,它会立即使用第二种样式呈现元素。
如果我将$nextTick 替换为setTimeout,它将按预期工作。
我哪里错了?必须有一种方法可以在不依赖超时的情况下实现这一点。
I've recreated the problem here
PS 我知道我可以用 Vue 过渡来做到这一点,但在实际项目中,要应用的样式更复杂并且是通过程序计算的,所以我宁愿在 js 中做,而不是在 css 中做
【问题讨论】:
-
你说过它可以使用
setTimeout。在您的示例中,我可以看到您确实在超时中等待了 100 毫秒。$nextTick最后比那个短。我知道这不是您所期望的,但这就是它的工作原理。 -
setTimeout(() => { this.styles = { backgroundColor: 'pink' } }, 0);你可以用 0 时间做 Timeout 以获得你想要的效果。应该和nextTick一样,因为某些原因不起作用。
-
正如我已经回答的那样,您需要等待下一个
event loop。$nextTick不这样做????
标签: javascript vue.js transition