I want to delay a v-if
toggle so that my element is not removed straight away but after 300 ms. I need to element to be removed from the DOM so I need to use a v-if
.
Currently I have a somewhat hacky solution to get this done. I wrapped my v-if
statement in a transition and set a transition with .3s
.
I am using the opacity here but I am not doing anything with it since I do not want to fade the element out but simply delay the v-if
toggle.
My element:
<transition name="delay-display-none">
<div class="i-need-to-be-removed-after-300-ms"></div>
</transition>
My style:
.delay-display-none-leave-active {
transition: opacity .3s
}
.delay-display-none-leave-to {
opacity: 1
}
Is there a better option to get this done instead of this hacky solution?
If you simply want to force a delayed v-if
response and you are already using <transition>
, you can kind of trick a delay by using a transition-delay
of the duration you want to wait, e.g. transition-delay: 300ms
, and setting transition-duration: 0
so that you do not actually fade anything.
An alternative way is to actually delay the update of the variable being passed into v-if
. Since the variable is dynamically updated (otherwise you cannot toggle v-if), you can use window.setTimeout(...)
to update its value instead, so that you can create a delayed effect. This solution requires slightly more care, because you would want to cancel the same timeout whenever a user quickly toggles the element, for example.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With