vue-transition过渡--day07

本文详细介绍了Vue中的过渡效果,包括过渡的类名、CSS过渡和动画、结合第三方库Animate.css的使用、JS过渡和动画的结合、appear属性及钩子函数的应用,以及在列表过渡中的各种场景和技巧,如一维和多维列表的排序过渡、交错过渡等。
摘要由CSDN通过智能技术生成

个人blog-1: 拾忆生活
个人blog-2: 极简-拾忆生活
欢迎大家来踩,同步更新


记住:唯一的限制是你的想象力。

以下单组件的抽离,格式不正确,只是为了结合理解。

过渡效果

  • <style> 中定义 css 效果
  • 第三方 CSS 动画库
    • Animate.css
  • 第三方 JavaScript 动画库
    • Velocity.js
  • 过渡钩子函数【重点】
    • methods 里面直接定义函数
    • 并在<transition> 组件中用v-on绑定过渡状态和methods里的函数

封装组件–transition

四种使用情形

  • 条件渲染 (使用 v-if)
  • 条件展示 (使用 v-show)
  • 动态组件
  • 组件根节点
<template>
  <div id="app">
    <button v-on:click="show = !show">
      Toggle
    </button>
    <transition name="fade">
        <p v-if="show">hello</p>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'app',
   data: {
    show: true
  }
}
</script>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity .5s;
}
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
  opacity: 0;
}
</style>

过渡的类名

在进入/离开的过渡中,有 6 个 class 切换

  • v-enter

    • 定义进入过渡的开始状态
    • 在元素被插入之前生效,在元素被插入之后的下一帧移除。
  • v-enter-active

    • 定义进入过渡生效时的状态
    • 在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。
  • v-enter-to

    • 定义进入过渡的结束状态
    • 在元素被插入之后下一帧生效 (与此同时 v-enter 被移除),在过渡/动画完成之后移除。
  • v-leave

    • 定义离开过渡的开始状态
    • 在离开过渡被触发时立刻生效,下一帧被移除。
  • v-leave-active

    • 定义离开过渡生效时的状态
    • 在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。
  • v-leave-to

    • 定义离开过渡的结束状态
    • 在离开过渡被触发之后下一帧生效 (与此同时 v-leave 被删除),在过渡/动画完成之后移除

注意1: 对于这些在过渡中切换的类名来说

  • 如果使用一个没有name属性的 <transition>,则 v- 是这些类名的默认前缀。
  • 如果使用 <transition name="my-transition">,那么 v-enter 会替换为 my-transition-enter

注意2: 过渡transition动画animation 的区别

  • 过渡transition
    • v-enter 类名在节点插入 DOM 后会立即删除
  • 动画animation
    • v-enter 类名在节点插入 DOM 后不会立即删除,而是在 animationend 事件触发时删除。

css过渡【样式里的transition】

  • <transition> 组件里 使用 name 特性
  • 绑类名 css 样式,以name属性值为基准,例子为slide-fade,后面短横线连接6大css的class
    • .slide-fade-enter
    • .slide-fade-enter-active
    • .slide-fade-leave-active
    • .slide-fade-leave-to
<template>
  <div id="example-1">
    <button @click="show = !show">
      Toggle render
    </button>
    <transition name="slide-fade">
      <p v-if="show">hello</p>
    </transition>
  </div>
</template>

<script>
    export default {
      el: '#example-1',
      data: {
        show: true
      }
    }
</script>

<style scoped>
.slide-fade-enter-active {
  transition: all .3s ease;
}
.slide-fade-leave-active {
  transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.slide-fade-enter, .slide-fade-leave-to
/* .slide-fade-leave-active for below version 2.1.8 */ {
  transform: translateX(10px);
  opacity: 0;
}
</style>

css动画【样式里的animation】

<template>
  <div id="example-2">
    <button @click="show = !show">Toggle show</button>
    <transition name="bounce">
      <p v-if="show">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris facilisis enim libero, at lacinia diam fermentum id. Pellentesque habitant morbi tristique senectus et netus.</p>
    </transition>
  </div>
</template>

<script>
    export default {
      el: '#example-2',
      data: {
        show: true
      }
    }
</script>

<style scoped>
.bounce-enter-active {
  animation: bounce-in .5s;
}
.bounce-leave-active {
  animation: bounce-in .5s reverse;
}
@keyframes bounce-in {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.5);
  }
  100% {
    transform: scale(1);
  }
}
</style>

用第三方css库【Animate.css 】

  • 引用<link href="https://cdn.jsdelivr.net/npm/animate.css@3.5.1" rel="stylesheet" type="text/css">
    • enter-class
    • enter-active-class
    • enter-to-class
    • leave-class
    • leave-active-class
    • leave-to-class
  • <transition> 组件中绑定类名和第三方库中的样式名
<template>
    <link href="https://cdn.jsdelivr.net/npm/animate.css@3.5.1" rel="stylesheet" type="text/css">

    <div id="example-3">
      <button @click="show = !show">
        Toggle render
      </button>
      <transition
        name="custom-classes-transition"
        enter-active-class="animated tada"
        leave-active-class="animated bounceOutRight"
      >
        <p v-if="show">hello</p>
      </transition>
    </div>
</template>

<script>
    export default {
      el: '#example-3',
      data: {
        show: true
      }
    }
</script>

css过渡和动画结合【样式里的transition和animation】

  • 1、隐式过渡持续时间:必须设置相应的事件监听器
    • 默认vue自动得出过渡效果的完成时机
  • 2、在 <transition> 标签中使用 type attribute(属性)来明确声明你需要 Vue 监听的类型【即选择设定哪个为主动效】
    • type="transition"
    • type="animation"

实例:

  • 这里涉及到appear下面在讲
  • type=“transition” ,设置过渡为主动效
    • 在style样式中的是transition过渡
    • 在transition标签中的类名是animate.css第三方库的animate动画
<template>
    <link href="https://cdn.jsdelivr.net/npm/animate.css@3.5.1" rel="stylesheet" type="text/css">

    <div id="root">
      <transition
        type="transition"
        name="fade"
        appear
        enter-active-class="animated swing fade-enter-active"  
        leave-active-class="animated bounce fade-leave-active"
        appear-active-class="animated swing"
      >
          <
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值