首页 > 其他分享 >Vue - 使用 transition 过渡动画、Animate.css 库动画

Vue - 使用 transition 过渡动画、Animate.css 库动画

时间:2024-06-20 13:43:32浏览次数:22  
标签:动画 Vue show transition leave enter css

 

一. transition

  • transition 标签包裹的内容会有一个过渡的动画效果
  • 使用 transition 过渡组件需要满足的条件:
    1. 条件渲染(v-if
    2. 条件展示(v-show
    3. 动态组件
  • 可以使用 name 属性给 transition 标签起名字
    1. class选择器名字和 name 属性有关系,这里 name 属性名为 fade, 则class选择器名称前缀都已fade开头,
    2. 如果不写name属性,则class选择器名称前缀默认以 v 开头
  • transition 标签包裹的内容从隐藏变为显示时候动画原理
    1. 在动画即将被执行的一瞬间(动画执行的第一帧),会向transition内部的标签上增加两个class选择器名字,分别是v-enterv-enter-active
    2. 在动画运行到第二帧的时候,会把 v-enter 的class选择器名称移除,然后增加一个v-enter-to的选择器名称
    3. 在动画执行结束的时候(动画执行的最后一帧),会把添加v-enter-activev-enter-to的class选择器名称移除
  • transition 标签包裹的内容从隐藏变为显示时候动画原理
    1. 在隐藏的第一个瞬间(动画执行的第一帧),会向transition内部的标签上增加两个class选择器名字,分别是v-leavev-leave-active
    2. 在动画运行到第二帧的时候,会把 v-leave 的class选择器名称移除,然后增加一个v-leave-to的选择器名称
    3. 在动画执行结束的时候(动画执行的最后一帧),会把添加v-leave-activev-leave-to的class选择器名称移除
  • 过渡CSS类名
    <transition>中的name属性用于 替换 vue钩子函数中的类名 v ,默认为 v
    1. v-enter: 定义进入动画之前,元素的起始状态。在元素被插入时生效,在下一个帧移除。
    2. v-enter-active: 定义进入动画的状态。在元素被插入时生效,在transition/animation完成之后移除。
    3. v-leave:定义离开之后动画的终止状态。在离开过渡被触发时生效,在下一个帧移除。
    4. v-leave-active: 定义离开动画的结束状态。在离开过渡被触发时生效,在transition/animation完成之后移除。

一个过渡动画的实例:

<template>
  <div class="wrap">
    <transition name="fade">
      <div v-show="show">hello world</div>
    </transition>
    <button @click="handleClick">切换显隐</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      show: true,
    };
  },
  methods: {
    handleClick() {
      this.show = !this.show;
    },
  },
};
</script>
<style scoped>
.v-enter,
.v-leave-to {
  opacity: 0;
}
.v-enter-active,
.v-leave-active {
  transition: opacity 3s;
}
</style>

二. Vue 中使用 @keyframes

1. @keyframes 的使用

  1. style 中设置@keyframes
  2. transition 标签 class样式中使用 @keyframes样式名称,这里为 bounce-in
<template>
  <div class="wrap">
    <transition name="fade">
      <div v-show="show">hello world</div>
    </transition>
    <button @click="handleClick">切换显隐</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      show: true,
    };
  },
  methods: {
    handleClick() {
      this.show = !this.show;
    },
  },
};
</script>
<style scoped>
@keyframes bounce-in{
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.5);
  }
  100% {
    transform: scale(1);
  }
}
.fade-enter-active {
  transform-origin: left center;
  animation:bounce-in 1s;
}
.fade-leave-active {
  transform-origin: left center;
  animation:bounce-in 1s reverse;
}

2. 自定义 transition 标签的 class 名字,使用 @keyframes

  1. 设置 transition 自定义 class 名

   2. 设置 class 的过渡样式

   3. 一个实例

<template>
  <div class="wrap">
    <h2>css过渡动画</h2>
    <transition name="fade" enter-active-class="active" leave-active-class="leave">
      <div v-show="show">hello world</div>
    </transition>
    <button @click="handleClick">切换显隐</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      show: true,
    };
  },
  methods: {
    handleClick() {
      this.show = !this.show;
    },
  },
};
</script>
<style scoped>
@keyframes bounce-in{
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.5);
  }
  100% {
    transform: scale(1);
  }
}
.active {
  transform-origin: left center;
  animation:bounce-in 1s;
}
.leave {
  transform-origin: left center;
  animation:bounce-in 1s reverse;
}
</style>

三. Vue 中使用Animate.css库

1. 使用Animate.css库,设置动画

Animate.css 官网:https://animate.style/

    1. 项目中引入 Animate.css 库
      使用教程:https://animate.style/#documentation

    2. 使用 Animate.css 库

 

   3. 一个实例

<template>
  <div class="wrap">
    <h2>css过渡动画</h2>
    <transition name="fade" enter-active-class="animate__animated animate__bounceInDown" leave-active-class="animate__animated animate__bounceOut">
      <div v-show="show">hello world</div>
    </transition>
    <button @click="handleClick">切换显隐</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      show: true,
    };
  },
  methods: {
    handleClick() {
      this.show = !this.show;
    },
  },
};
</script>
<style scoped>
</style>

2. 页面刷新,展示Animate.css库动画效果

上面设置的动画效果,在刷新的时候是没有效果的;如果需要在页面刷新时,也展示动画效果,需要添加以下设置:

 

3. 同时使用 transition 动画,和Animate.css 库动画效果

  1. 增加 class 名

   2. style 中编写对应的样式

   3. 同时使用 transition 动画,和 Animate.css 库动画,动画时长不一致时,手动设置动画时长基准。设置 type 属性
   Animate.css 库动画默认为一秒结束,这里 transition 动画设置的时 3 秒结束,所以以 transition 动画为基准,三秒结束动画 type="transition"

   4. 自定义动画时长
    为 transition 标签添加绑定 duration 属性,值为毫秒数 :duration="10000"

   5. 自定义动画时长,分别设置显示和隐藏的动画时长
    为 transition 标签添加绑定 duration 属性,值为一个对象 :duration="{enter:5000,leave:10000}"

   6. 一个实例

<template>
  <div class="wrap">
    <h2>css过渡动画</h2>
    <transition
      :duration="{enter:5000,leave:10000}"
      name="fade"
      appear
      enter-active-class="animate__animated animate__bounce fade-enter-active"
      leave-active-class="animate__animated animate__shakeX fade-leave-active"
      appear-active-class="animate__animated animate__bounceInDown"
    >
      <div v-show="show">hello world</div>
    </transition>
    <button @click="handleClick">切换显隐</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      show: true,
    };
  },
  methods: {
    handleClick() {
      this.show = !this.show;
    },
  },
};
</script>
<style scoped>
.fade-enter,
.fade-leave-to {
  opacity: 0;
}
.fade-enter-active,
.fade-leave-active {
  transition: opacity 3s;
}
</style>

 

标签:动画,Vue,show,transition,leave,enter,css
From: https://www.cnblogs.com/caihongmin/p/18258489

相关文章

  • 基于fastapi+vue登记系统
    1.创建fastapi项目2.创建vue项目npmcreatevue@latestcdwebnpminstallnpminstallelement-plus修改main.js注册elementui和routerimport'./assets/main.css'importAppfrom'./App.vue'import{createApp}from'vue'importrouterfrom......
  • Vue 中 v-for 的全方位解读:含案例与 key 属性运用及常用数组方法
    目录v-for介绍v-forkey属性的使用Vue数组方法v-for介绍        v-for能够对数字、数组以及对象进行遍历。值得注意的是,当v-for与v-if一同运用时,v-for的优先级要高于v-if。正因如此,应尽量避免将v-if和v-for共同使用。特别是在嵌套使用的情况下,每一......
  • Vue生态工具组合
    文章目录1.Vue版本2.构建工具3.包管理器4.状态管理5.http库6.UI库7.站点生成器8.优质内容收录vue生态工具多种多样,我们要如何选择并组合起来才最好呢。接下来给大家推荐我认为比较好的工具组合方式,方便大家在搭建vue项目时可做一个参考。1.Vue版本新项目推荐优先选......
  • Java计算机毕业设计+Vue实习实训管理系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今社会,实习实训已成为高等教育中不可或缺的一部分,对于学生实践能力和职业素养的提升具有重要意义。然而,传统的实习实训管理方式存在着诸多不便,如......
  • 防抖ref如何在vue中被定义
    本文由ChatMoney团队出品为什么ref要实现防抖在vue的开发过程中,我们通常会使用到ref,但在我们需要对一个频繁的赋值操作做防抖操作时,我们通常只能通过编写一个独立的防抖函数来实现,这样相对会多一些步骤(麻烦一些)。例如我们给一个即时搜索框的input实现防抖输入(即在输入文本n秒......
  • 在vue中定义一个防抖ref
    本文由ChatMoney团队出品为什么ref要实现防抖在vue的开发过程中,我们通常会使用到ref,但在我们需要对一个频繁的赋值操作做防抖操作时,我们通常只能通过编写一个独立的防抖函数来实现,这样相对会多一些步骤(麻烦一些)。例如我们给一个即时搜索框的input实现防抖输入(即在输入文本n秒......
  • DataTrigger 数据触发器触发动画的方式及问题解决
    在WPF中通过触发器实现动画的方式很常见,这里记录一下再使用DataTrigger数据触发器触发动画的一些经验,以便备忘。一、数据触发器DataTrigger与普通的触发器Trigger区别:Trigger普通触发器<!--样式--><StyleTargetType="TextBlock"><Style.Triggers><!--这里......
  • 解决使用vue-awesome-swiper,loop设置为true点击失效问题
    <template><divclass="app-container":class="[pageMode==='pageMode2560'?'pageMode2560':'']"><divclass="tag—title">物联感知</div><......
  • Java项目-基于SpringCloud+springboot+vue的分布式架构网上商城系统(源码+数据库+文档
    源码获取:https://download.csdn.net/download/u011832806/89440647基于SpringCloud+SpringBoot+Vue的分布式架构网上商城系统   开发语言:Java   数据库:MySQL   技术:SpringCloud+SpringBoot+MyBatis+Vue.js+eureka   工具:IDEA/Ecilpse、Navicat、Maven经......
  • Java项目-基于ssm+vue的大学生兼职跟踪系统(源码+数据库+文档)​
    如需完整项目,请私信博主基于ssm+Vue的大学生兼职跟踪系统开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven本文以Java为开发技术,实现了一个大学生兼职跟踪系统。大学生兼职跟踪系统的主要实现功能包括:管理员:首页、个人中心、商......