vue.js 过渡和动画

Vue 在插入、更新或者移除 DOM 时,动态添加css类名来达到想要的动画效果

1.transition标签

给元素包裹一个transition标签,并设置name属性的值,这个值可以随意设置,但是他会决定Dom更新时自动添加的css类名

这里name="xxx"作为演示

<div id="app">
    <button @click="isShow = !isShow">点我切换显示隐藏</button>
    <transition name="xxx">
        <p v-show="isShow">{{msg}}</p>
    </transition>
</div>


(1)当点击按钮,将p元素由显示切换成隐藏时,p元素添加2个css类:

<p class="xxx-leave-active xxx-leave-to">vue动画效果</p>

当p元素完全隐藏时,将移除相应的css类

<p class="" style="display: none;">vue动画效果</p>

(2)再次点击按钮,将p元素由隐藏切换成显示时,p元素添加2个css类:

<p class="xxx-enter-active xxx-enter-to" style="">vue动画效果</p>

当p元素完全显示时,将移除相应的css类

<p class="" style="">vue动画效果</p>

(3)xxx-enter和xxx-leave设定的样式会在元素切换开始的瞬间生效。(虽然在dom中的class属性里面看不见这2个类)通俗的说,这2个类给过渡提供了起始属性值,而xxx-enter-to和xxx-leave-to提供了结束属性值,以便计算过渡效果

(4)v-show/v-if的效果要等过渡和动画结束之后才生效

2.设置css类的属性

前面的例子说明,当元素切换时会添加4个css类,需要为这些css类设置具体的属性才能看到效果

<style>
    .xxx-enter-active,.xxx-leave-active{
        /* 设定过渡效果 */
        transition: all 10s;
    }
    /* 显示 */
    .xxx-enter{
        /* 过渡的起始效果 */
        opacity: 0;
    }
    .xxx-enter-to{
        /* 过渡的结束效果 */
        opacity: 1;
    }
    /* 隐藏 */
    .xxx-leave{
        /* 过渡的起始效果 */
        opacity: 1;
    }
    .xxx-leave-to{
        /* 过渡的结束效果 */
        opacity: 0;
    }
</style>

可以简写成:

<style>
    .xxx-enter-active,.xxx-leave-active{
        /* 设定过渡效果 */
        transition: all 10s;
    }
    .xxx-enter,.xxx-leave-to{
        opacity: 0;
    }
    .xxx-enter-to,.xxx-leave{
        opacity: 1;
    }
</style

PS:一般都是在元素显示或者隐藏的过程中的类名加入过渡样式,在元素刚进入动画时和结束动画时设定开始的样式属性值和结束样式属性值

3.动画

(1)注册动画

@keyframes bounce-in {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.5);
  }
  100% {
    transform: scale(1);
  }
}

(2)为目标元素包裹transition标签,并设置name属性的值

<div id="app">
    <button @click="isShow = !isShow">点我切换显示隐藏</button>
    <br>
    <transition name="xxx">
        <!-- 设定成行内块级元素,方便控制元素大小 -->
        <p v-show="isShow" style="display: inline-block">{{msg}}</p>
    </transition>
</div>

(3)设置css类的属性

.xxx-enter-to,.xxx-leave-to{
    /* 调用动画 */
    nimation: bounce-in 10s;
}
.xxx-enter,.xxx-leave{
    /* 添加起始效果,适应动画的第一帧 */
    transform: scale(0);
}

4.自定义过渡的类名

如果不想使用vue定义的类名,而是使用自己或者第三方已经定义好的类名,可以在transition标签中通过下面的属性指定相应的类名:
enter-class
enter-active-class
enter-to-class (2.1.8+)
leave-class
leave-active-class
leave-to-class (2.1.8+)

基本使用:

//这里用到第三方的类名
<link href="https://cdn.jsdelivr.net/npm/[email protected]" rel="stylesheet" type="text/css">
//name属性可以不写
<transition
name=""
enter-active-class="animated tada"
leave-active-class="animated bounceOutRight"
>

animate.css预置了很多css类,可以在官网选择想要的类并查看相应的动画效果,不过记得要添加基本类animated

5.多个元素过渡

(1)transition标签渲染后内部只能有一个子元素,所以当要对多个元素进行切换时只能使用v-if而不能使用v-show
(2)当有相同标签名的元素切换时,需要通过 key 特性设置唯一的值来标记以让 Vue 区分它

<transition name="xxx">
    <li v-if="index===0" key="1">
        <h1>第一屏</h1>
    </li>
    <li v-else key="2">
        <h1>第二屏</h1>
    </li>
</transition>
<style>
    .xxx-enter-active,.xxx-leave-active{
        transition: all 10s;
    }
    .xxx-enter{
        transform: translateX(100%);
    }
    .xxx-leave-to{
        transform: translateX(-100%);
    }
</style>

6.过渡模式 mode

对于上面2个元素切换时,默认情况下。元素进入和元素离开同时发生,会出现两个元素同时出现在页面的情形。可以通过修改mode属性来成其他效果。
in-out:新元素先进行过渡,完成之后当前元素过渡离开。
out-in:当前元素先进行过渡,完成之后新元素过渡进入。

<transition name="xxx"  mode="out-in">
    <li v-if="index===0" key="1">
        <h1>第一屏</h1>
    </li>
    <li v-else key="2">
        <h1>第二屏</h1>
    </li>
</transition>

默认效果:

out-in:先出后进

in-out:先进后出

7.钩子函数

可以在transition标签中通过属性中声明 JavaScript 钩子
回调函数的第一个参数为el,就是当前元素

<transition name="xxx"  mode="out-in"
    @before-enter="beforeEnter"
    @enter="enter"
    @after-enter="afterEnter"

    @before-leave="beforeLeave"
    @leave="leave"
    @after-leave="afterLeave"
>
<script>
    new Vue({
        el:"#app",
        data:{
            index:0,
            msg:"vue动画效果"
        },
        methods:{
            test(){
                this.index===0? this.index=1:this.index=0
            },
            beforeEnter(){
                console.log('beforeEnter')
            },
            enter(){
                console.log('enter')
            },
            afterEnter(){
                console.log('after-enter')
            },
            beforeLeave(){
                console.log('beforeLeave')
            },
            leave(){
                console.log('leave')
            },
            afterLeave(){
                console.log('afterLeave')
            }
        }
    })
</script>

8.初始渲染的过渡

(1)默认情况下,初次渲染时没有过渡和动画效果,可以通过 appear 特性设置节点在初始渲染的过渡

<transition appear>
  <!-- ... -->
</transition>

效果:

(2)还可以自定义初始渲染过渡的 CSS 类名

<transition
  appear
  appear-class="custom-appear-class"
  appear-to-class="custom-appear-to-class" (2.1.8+)
  appear-active-class="custom-appear-active-class"
>
  <!-- ... -->
</transition>

(3)初次渲染的钩子函数

<transition
  appear
  v-on:before-appear="customBeforeAppearHook"
  v-on:appear="customAppearHook"
  v-on:after-appear="customAfterAppearHook"
  v-on:appear-cancelled="customAppearCancelledHook"
>
  <!-- ... -->
</transition>

原文地址:https://www.cnblogs.com/OrochiZ-/p/11831076.html

时间: 2024-10-10 11:31:42

vue.js 过渡和动画的相关文章

Vue.js 过渡 &amp; 动画

Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果. Vue 提供了内置的过渡封装组件,该组件用于包裹要实现过渡效果的组件. 首先是无过渡效果的动画 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> <style> span._active{ background:pink; } <

Vue中过渡与动画

1.元素的显示与隐藏,实现过渡动画效果 (1)为目标元素添加一个父元素 transition,并添加name属性 在目标元素中添加v-show=“isShow”  isShow为Vue中的data 添加button按钮控制“isShow的值 <div id="demo"> <button @click="isShow = !isShow">点击这里变色</button> <transition name="isd&

关于vue.js过渡css类名的理解

首先附上官方文档图. 总体就是在解释v-enter,v-enter-active,v-leave,v-leave-active的意思,但是我看了半天,就是看不懂,老是和鼠标的mouseover和mouseout事件联想在一起,在经过多方的查找,总算是理解了,以下就是我所理解的意思,希望对路过的有所帮助,更希望路过的能帮我检查检查. start: 首先,通过一个例子来说明,实践是检验真理的唯一标准. 结果:点击按钮,show=false时,div消失:再次点击,show=true,div用蓝色逐渐

vue.js 配合css3 动画

通过点击事件触发v-for渲染的列表各项动画 methods : { adviceFadeIn() { this.$refs.adviceList.forEach((v, i) => { var delay = i*60 var bottom = 0 //清空bottom的值. v.style.bottom = '-2rem' //确保每次点击触发动画前先让列表归位. setTimeout(() => { bottom = (2.5*(this.$refs.adviceList.length-

Vue.js高仿饿了么外卖App 前端框架Vue.js 1.0升级2.0

课程目录:第1章 课程简介介绍课程的学习目标和学习内容.第2章 Vuejs介绍从前端开发趋势分析开始,引入 MVVM 开发框架和 Vue.js,接着对比流行框架Angular 和 React,最后详细介绍 Vue.js 的核心思想-数据驱动和组件化.第3章 Vue-cli 开启 Vuejs 项目介绍 Vue 项目的脚手架,如何安装,对脚手架生成的目录文件做介绍,介绍 Vue 组件的编写方法,最后运行 demo 项目并介绍 webpack 构建脚本来说明 demo 的运行原理.第4章 项目实战-准

Vue.js 高仿饿了么外卖APP

第1章 课程简介介绍课程的学习目标和学习内容.1-1 课程简介1-2 课程安排 第2章 Vuejs介绍从前端开发趋势分析开始,引入 MVVM 开发框架和 Vue.js,接着对比流行框架Angular 和 React,最后详细介绍 Vue.js 的核心思想-数据驱动和组件化.2-1 Vuejs介绍-近年来前端开发趋势2-2 Vuejs介绍-MVVM框架2-3 Vuejs介绍-什么是Vuejs及Vuejs生态2-4 Vuejs介绍-对比Angular.React2-5 Vuejs介绍-Vuejs核心

Vue.js高仿饿了么外卖App 2016最火前端框架

第1章 课程导学(二期)-15号开放 包括课程概述.核心模块.核心技术.课程安排.课程收获.讲授方式.学习前提等方面的介绍,最后演示了整个外卖App的功能,让同学们对课程项目有一个直观的了解. 1-1 导学(必看) 第2章 项目准备工作(二期)-15号开放 包括项目需求分析.Vue-cli 3.0 脚手架介绍.cube-ui 介绍.目录模块分析.api 接口 mock 等. 2-1 Vue-cli 3.0 介绍 2-2 目录介绍 & cube-ui 安装 2-3 api 接口 mock 第3章

(私人收藏)Vue.js手册及教程

(私人收藏)Vue.js手册及教程 https://pan.baidu.com/s/1XG1XdbbdBQm7cyhQKUIrRQ5lrt Vue.js手册及教程 Vue.js 教程 Vue.js 安装 含有1个附件,如下: vue.js Vue.js 目录结构 Vue.js 起步 Vue.js 模板语法 Vue.js 条件与循环 循环语句 Vue.js 计算属性 Vue.js 监听属性 Vue.js 样式绑定 Vue.js 事件处理器 Vue.js 表单 Vue.js 组件 Vue.js 自定

Vue.js 系列教程 5:动画

原文:intro-to-vue-5-animations 译者:nzbin 译者的话:经过两周的努力,终于完成了这个系列的翻译,由于时间因素及个人水平有限,并没有详细的校对,其中仍然有很多不易理解的地方.我和原作者的初衷一样,希望大家能够通过这个系列文章有所收获,至少可以增加学习的乐趣,我也在学习的路上,所学心得必将与大家共勉. 这是 JavaScript 框架 Vue.js 五篇教程的第五部分.在这个系列的最后一部分,我们将学习动画(如果你了解我,你知道这一章迟早会来).这不是一个完整的指南,