[Vue]动画与过渡(一)

简介: [Vue]动画与过渡

前言

系列文章目录:

[Vue]目录

老师的课件笔记,不含视频 https://www.aliyundrive.com/s/B8sDe5u56BU

笔记在线版: https://note.youdao.com/s/5vP46EPC

视频:尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通

1. 绑定class样式实现动画效果

main.js

import Vue from 'vue'
import App from './App.vue'
//关闭vue的生产提示
Vue.config.productionTip = false
new Vue({
  render: h => h(App)
}).$mount('#app')

App.vue

<template>
  <div class="app">
    <Test></Test>
  </div>
</template>
<script>
//导入子组件
import Test from './components/Test.vue'
export default {
  name: 'App',
  components: {
    Test
  }
}
</script>
<style scoped>
</style>

Test.vue

<template>
  <div>
    <button @click="changeShow">显示/隐藏</button>
    <h1 :class="animation" v-show="isShow">hello world</h1>
  </div>
</template>
<script>
export default {
  name: 'Test',
  data() {
    return {
      // 控制显示与隐藏
      isShow: false,
      // 需要进行绑定的样式
      animation: ''
    }
  },
  methods: {
    changeShow() {
      // 如果是隐藏状态
      if (!this.isShow) {
        // 更改为显示状态,并且绑定进入样式
        this.isShow = true
        this.animation = 'enter'
      } else {
        // 如果不为隐藏状态
        // 更改为隐藏状态,绑定离开样式
        this.isShow = false
        this.animation = 'leave'
      }
    }
  }
}
</script>
<style scoped>
h1 {
  background-color: orange;
}
/* 进入动画 */
.enter {
  animation: sgg 0.5s linear;
}
/* 离开动画 */
.leave {
  animation: sgg 0.5s linear reverse;
}
/* 自定义动画 */
@keyframes sgg {
  from {
    transform: translateX(-100%);
  }
  to {
    transform: translateX(0px);
  }
}
</style>

2. transition 标签实现动画效果

2.1 语法

vue规定,想要让哪个元素具有动画效果,就使用 transition 标签将该元素进行包裹,vue会在合适的时机为元素加上动画效果。

<transition>
      <h1 v-show="isShow">hello world</h1>
    </transition>

要实现动画效果,还需要将动画的命名修改为符合vue的规定,进入页面的动画的命名为v-enter-active,离开页面的动画的命名为v-leave-active

/* 进入动画 */
.v-enter-active {
  animation: sgg 0.5s linear;
}
/* 离开动画 */
.v-leave-active {
  animation: sgg 0.5s linear reverse;
}
/* 自定义动画 */
@keyframes sgg {
  from {
    transform: translateX(-100%);
  }
  to {
    transform: translateX(0px);
  }
}

2.2 动画实现

Test.vue

<template>
  <div>
    <button @click="changeShow">显示/隐藏</button>
    <transition>
      <h1 v-show="isShow">hello world</h1>
    </transition>
  </div>
</template>
<script>
export default {
  name: 'Test',
  data() {
    return {
      // 控制显示与隐藏
      isShow: false,
    }
  },
  methods: {
    changeShow() {
      // 如果是隐藏状态
      if (!this.isShow) {
        // 更改为显示状态
        this.isShow = true
      } else {
        // 如果不为隐藏状态
        // 更改为隐藏状态
        this.isShow = false
      }
    }
  }
}
</script>
<style scoped>
h1 {
  background-color: orange;
}
/* 进入动画 */
.v-enter-active {
  animation: sgg 0.5s linear;
}
/* 离开动画 */
.v-leave-active {
  animation: sgg 0.5s linear reverse;
}
/* 自定义动画 */
@keyframes sgg {
  from {
    transform: translateX(-100%);
  }
  to {
    transform: translateX(0px);
  }
}
</style>

2.3 为 transition 标签指定名字

为 transition 标签指定名字,需要使用 transition 标签上的 name 属性,如果为 transition 标签指定了名字,那么对应的动画的名字也要进行相应的更改。

为 transition 标签指定了名字,可以实现使得不同的元素有不同的动画。

<transition name="hello">
      <h1 v-show="isShow">hello world</h1>
    </transition>
/* 进入动画 */
.hello-enter-active {
  animation: sgg 0.5s linear;
}
/* 离开动画 */
.hello-leave-active {
  animation: sgg 0.5s linear reverse;
}
/* 自定义动画 */
@keyframes sgg {
  from {
    transform: translateX(-100%);
  }
  to {
    transform: translateX(0px);
  }
}

Test.vue

<template>
  <div>
    <button @click="changeShow">显示/隐藏</button>
    <transition name="hello">
      <h1 v-show="isShow">hello world</h1>
    </transition>
  </div>
</template>
<script>
export default {
  name: 'Test',
  data() {
    return {
      // 控制显示与隐藏
      isShow: false,
    }
  },
  methods: {
    changeShow() {
      // 如果是隐藏状态
      if (!this.isShow) {
        // 更改为显示状态
        this.isShow = true
      } else {
        // 如果不为隐藏状态
        // 更改为隐藏状态
        this.isShow = false
      }
    }
  }
}
</script>
<style scoped>
h1 {
  background-color: orange;
}
/* 进入动画 */
.hello-enter-active {
  animation: sgg 0.5s linear;
}
/* 离开动画 */
.hello-leave-active {
  animation: sgg 0.5s linear reverse;
}
/* 自定义动画 */
@keyframes sgg {
  from {
    transform: translateX(-100%);
  }
  to {
    transform: translateX(0px);
  }
}
</style>

2.4 页面加载完成立即执行动画

要实现页面加载完成立即执行动画,需要使用 transition 标签的 appear 属性,指定该属性的值为 true。

<!-- 
      需要进行属性绑定,如果使用 appear="true" 则 appear 的值为 “true”
      使用 :appear="true",appear 的值为 true
    -->
    <transition name="hello" :appear="true">
      <h1 v-show="isShow">hello world</h1>
    </transition>

或者

<!-- 
      appear 相当于 :appear="true"
    -->
    <transition name="hello" appear>
      <h1 v-show="isShow">hello world</h1>
    </transition>

Test.vue

<template>
  <div>
    <button @click="changeShow">显示/隐藏</button>
    <!-- 
      页面加载完成立即执行动画,
      需要设置默认 h1 为显示
    -->
    <transition name="hello" appear>
      <h1 v-show="isShow">hello world</h1>
    </transition>
  </div>
</template>
<script>
export default {
  name: 'Test',
  data() {
    return {
      // 控制显示与隐藏
      isShow: true,
    }
  },
  methods: {
    changeShow() {
      // 如果是隐藏状态
      if (!this.isShow) {
        // 更改为显示状态
        this.isShow = true
      } else {
        // 如果不为隐藏状态
        // 更改为隐藏状态
        this.isShow = false
      }
    }
  }
}
</script>
<style scoped>
h1 {
  background-color: orange;
}
/* 进入动画 */
.hello-enter-active {
  animation: sgg 0.5s linear;
}
/* 离开动画 */
.hello-leave-active {
  animation: sgg 0.5s linear reverse;
}
/* 自定义动画 */
@keyframes sgg {
  from {
    transform: translateX(-100%);
  }
  to {
    transform: translateX(0px);
  }
}
</style>


相关文章
|
6天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
51 1
|
17天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
48 1
vue学习第一章
|
2月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
34 1
|
2月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
35 1
|
2月前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
36 1
|
2月前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能

热门文章

最新文章