问题:Vue.js 延迟 v-if 切换

我想延迟一个v-if切换,以便我的元素不会立即被移除,而是在 300 毫秒后移除。我需要从 DOM 中删除元素,所以我需要使用v-if

目前我有一个有点hacky的解决方案来完成这项工作。我将我的v-if语句包装在一个转换中,并使用.3s设置一个转换。

我在这里使用不透明度,但我没有对它做任何事情,因为我不想让元素淡出,而只是延迟v-if切换。

我的元素:

<transition name="delay-display-none">
    <div class="i-need-to-be-removed-after-300-ms"></div>
</transition>

我的风格:

.delay-display-none-leave-active {
    transition: opacity .3s
}
.delay-display-none-leave-to {
    opacity: 1
}

有没有更好的选择来完成这项工作,而不是这个 hacky 解决方案?

解答

如果您只是想强制延迟v-if响应并且您已经在使用<transition>,您可以通过使用您想要等待的持续时间的transition-delay来欺骗延迟,例如transition-delay: 300ms,并设置transition-duration: 0以便您实际上不会褪色。

另一种方法是实际延迟传递到v-if的变量的更新。由于变量是动态更新的(否则无法切换 v-if),可以使用window.setTimeout(...)代替更新其值,这样就可以创建延迟效果。此解决方案需要稍微多加注意,因为例如,每当用户快速切换元素时,您都希望取消相同的超时。

Logo

前往低代码交流专区

更多推荐