Vue 过渡按钮淡入淡出
Vue transition buttons fading in and out
我有一个包含表单的项目。当后端成功接收到表单时,我们应该将按钮换成另一个按钮,向用户确认他的请求已通过。
但是当我尝试使用 Vue 和过渡来执行此操作时,我可以让按钮交换,但淡入淡出不起作用。按钮立即交换。
这是模板内按钮的转换:
<transition name="fade" mode="out-in">
<button
v-if="!valid"
class="my-3 px-4 py-3 rounded-md shadow-sm text-base font-medium text-white-primary bg-red-primary hover:bg-red-secondary"
@click="checkForm"
>
Request Beta Access
</button>
<button
v-if="valid"
class="my-3 px-4 py-3 rounded-md shadow-sm text-base font-medium text-white-primary bg-green-300 hover:bg-red-secondary"
@click="checkForm"
>
Request Sended
</button>
</transition>
这是我的局部变量 valid 被更改的函数。此时我正在使用超时来模拟将表单发送到后端。当您将表单发送到后端时,第一个 setTimeout 模拟一个小的延迟。第二次超时是通过更改局部有效变量显示成功按钮2秒:
async sendBetaRequest () {
setTimeout(() => {
this.clearForm()
this.valid = true
setTimeout(() => {
this.valid = false
}, 2000)
}, 1000)
},
正如我在评论中所说,您需要自己定义转换,Vue 不会为您提供它们。
最常用的方法是使用CSS classes。
这是一个例子:
new Vue({
el: '#app',
data: {
valid: false
},
methods: {
sendBetaRequest() {
setTimeout(() => {
this.valid = true
setTimeout(() => {
this.valid = false
}, 2000)
}, 1000)
},
}
})
.fade-enter-active,
.fade-leave-active {
opacity: 1;
transition: opacity 0.3s;
}
.fade-leave-to,
.fade-enter {
opacity: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<transition name="fade" mode="out-in">
<button v-if="!valid" @click="sendBetaRequest" :key="1">
Request Beta Access
</button>
<button v-else :key="2">
Request Sended
</button>
</transition>
</div>
您可以为此使用转换库,但是,如果您是 Vue 的新手,我建议您尽快掌握它,而不是稍后,因为您需要进一步了解它下线。
我有一个包含表单的项目。当后端成功接收到表单时,我们应该将按钮换成另一个按钮,向用户确认他的请求已通过。
但是当我尝试使用 Vue 和过渡来执行此操作时,我可以让按钮交换,但淡入淡出不起作用。按钮立即交换。
这是模板内按钮的转换:
<transition name="fade" mode="out-in">
<button
v-if="!valid"
class="my-3 px-4 py-3 rounded-md shadow-sm text-base font-medium text-white-primary bg-red-primary hover:bg-red-secondary"
@click="checkForm"
>
Request Beta Access
</button>
<button
v-if="valid"
class="my-3 px-4 py-3 rounded-md shadow-sm text-base font-medium text-white-primary bg-green-300 hover:bg-red-secondary"
@click="checkForm"
>
Request Sended
</button>
</transition>
这是我的局部变量 valid 被更改的函数。此时我正在使用超时来模拟将表单发送到后端。当您将表单发送到后端时,第一个 setTimeout 模拟一个小的延迟。第二次超时是通过更改局部有效变量显示成功按钮2秒:
async sendBetaRequest () {
setTimeout(() => {
this.clearForm()
this.valid = true
setTimeout(() => {
this.valid = false
}, 2000)
}, 1000)
},
正如我在评论中所说,您需要自己定义转换,Vue 不会为您提供它们。
最常用的方法是使用CSS classes。
这是一个例子:
new Vue({
el: '#app',
data: {
valid: false
},
methods: {
sendBetaRequest() {
setTimeout(() => {
this.valid = true
setTimeout(() => {
this.valid = false
}, 2000)
}, 1000)
},
}
})
.fade-enter-active,
.fade-leave-active {
opacity: 1;
transition: opacity 0.3s;
}
.fade-leave-to,
.fade-enter {
opacity: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<transition name="fade" mode="out-in">
<button v-if="!valid" @click="sendBetaRequest" :key="1">
Request Beta Access
</button>
<button v-else :key="2">
Request Sended
</button>
</transition>
</div>
您可以为此使用转换库,但是,如果您是 Vue 的新手,我建议您尽快掌握它,而不是稍后,因为您需要进一步了解它下线。