Vue过度与动画

本文展示了如何在Vue.js中使用transition和transition-group组件来实现元素的进入、离开和出现动画效果。通过定义CSS关键帧动画和绑定不同的active类,可以自定义过渡效果。此外,还介绍了如何结合animate.css库快速应用预定义的动画。

Test.vue:元素外面包一层transition,展示的时候就默认调用style里面的v-enter-action和v-leave-action执行进入和退出效果,appear上来默认展示动画效果

<template>
  <div>
    <button @click="isShow = !isShow">显示/隐藏</button>
<!--元素外面包一层transition,展示的时候就默认调用style里面的v-enter-action和v-leave-action执行进入和退出效果,appear上来默认展示动画效果-->
    <transition appear>
      <h1 v-show="isShow">你好啊!</h1>
    </transition>
  </div>
</template>

<script>
export default {
  name: "MyTest",
  data(){
    return{
      isShow:true
    }
  }
}
</script>

<style scoped>
  h1{
    background-color: orange;
  }
  .v-enter-active{
    animation: liner 0.5s linear;
  }
  .v-leave-active{
    animation: liner 0.5s linear reverse;
  }
  /*这里定义的liner名称随便,供上面animation用*/
  @keyframes liner {
    from{
      transform: translateX(-100%);
    }
    go{
      transform: translateX(0px);
    }
  }
</style>

 Test2.vue :  多条数据需要用transition-group展示,name属性与style里面的要一样,多条数据需要设置key值

<template>
  <div>
    <button @click="isShow = !isShow">显示/隐藏</button>
<!--多条数据需要用transition-group展示,name属性与style里面的要一样,多条数据需要设置key值-->
    <transition-group name="hello" appear>
      <h1 v-show="!isShow" key="1">你好啊!</h1>
      <h1 v-show="isShow" key="2">liner!</h1>
    </transition-group>
  </div>
</template>

<script>
export default {
  name: "MyTest",
  data(){
    return{
      isShow:true
    }
  }
}
</script>

<style scoped>
  h1{
    background-color: orange;
  }
  /*进入的起点,离开的终点*/
  .hello-enter,.hello-leave-to{
    transform: translateX(-100%);
  }
  /*进入的终点,离开的起点*/
  .hello-enter-to,.hello-leave{
    transform: translateX(0);
  }
  /*进入,离开的动作过程触发效果*/
  .hello-enter-active,.hello-leave-active{
    transition: 0.5s linear;
  }
</style>

Test3.vue :  安装第三方样式库animate.css

npm install animate.css

 先导入import 'animate.css',多条数据transition-group,name用的animate.css库中的name,进出离开效果自动触发,enter-active-class和leave-avtive-class绑定的效果

<template>
  <div>
    <button @click="isShow = !isShow">显示/隐藏</button>
<!--多条数据transition-group,name用的animate.css库中的name,进出离开效果自动触发,enter-active-class和leave-avtive-class绑定的效果-->
    <transition-group
        name="animate__animated animate__bounce"
        appear
        enter-active-class="animate__swing"
        leave-active-class="animate__bounceOutUp"
    >
      <h1 v-show="!isShow" key="1">你好啊!</h1>
      <h1 v-show="isShow" key="2">liner!</h1>
    </transition-group>
  </div>
</template>

<script>
import 'animate.css'
export default {
  name: "MyTest",
  data(){
    return{
      isShow:true
    }
  }
}
</script>

<style scoped>
  h1{
    background-color: orange;
  }


</style>

### Vue.js 中过渡动画的使用方法 Vue 提供了多种方式来处理元素或组件进入和离开页面时的过渡效果。对于较为复杂的场景,可以采用 JavaScript 钩子函数配合 CSS 类名的方式来进行更精细的操作[^1]。 #### 单元素/组件的入场出场动画 当涉及到单个元素或简单组件的状态变化(显示或隐藏),`<transition>` 是最常用的选择之一。它允许开发者定义不同阶段下的样式类: - **v-enter**: 定义进入过渡的开始状态,在元素被插入之前生效。 - **v-enter-active**: 定义整个进入过程中的活动状态。 - **v-enter-to**: (2.1.8+) 定义进入过渡结束后的最终状态。 - **v-leave**: 定义离开过渡的起始状态。 - **v-leave-active**: 定义整个离开过程中持续存在的状态。 - **v-leave-to**: (2.1.8+) 定义离开过渡结束后的目标状态。 这些类可以在 `<style>` 标签内自定义,也可以通过外部CSS文件引入[^5]。 下面是一个具体的例子展示了如何创建一个按钮点击触发的文字显隐效果,并附带弹性动画: ```html <div id="example"> <button @click="toggle">Toggle</button> <transition name="fade"> <p v-if="visible">Hello!</p> </transition> </div> <script> new Vue({ el: '#example', data() { return { visible: false, }; }, methods: { toggle() { this.visible = !this.visible; } } }); </script> <style scoped> .fade-enter-active, .fade-leave-active { transition: opacity 0.5s ease; } .fade-enter-from, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ { opacity: 0; } </style> ``` 此代码片段实现了点击按钮后文字“Hello!”淡入淡出的效果[^3]。 为了实现更为复杂的功能,还可以利用JavaScript钩子函数如 `beforeEnter`, `enter`, `afterEnter`, `enterCancelled`, `beforeLeave`, `leave`, `afterLeave`, 和 `leaveCancelled`. 这些钩子使得能够精确控制DOM操作的时间点以及执行额外逻辑。 例如,如果想要在某个特定时刻改变元素的位置或其他属性,则可以通过监听上述事件并编写相应的回调函数来达成目的。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林代码er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值