Vue的过渡

2023-11-12

目录

单元素过渡

 1、css过渡

2、过渡的类名介绍: 

3、CSS动画

4、自定义过渡的类名:

5、元素过渡使用JavaScript钩子函数

多元素过渡

 1、基础用法:

 2、key属性

3、过渡模式

多组件过渡

列表过渡 



单元素过渡

 1、css过渡

        Vue.js提供了内置的过渡封装组件transition,该组件用于包含要实现过渡效果的DOM元素。transition组件只会把过渡效果应用到其它包含的内容上,而不会额外渲染DOM元素。过渡封装组件的语法格式如下:

<transition name="nemeoftransition"><div></div></transition>

语法中的nameoftransition参数用于自动生成CSS过渡类名。

为元素和组件添加过渡效果主要应用在下列情形中:

  1. 条件渲染(使用v-if指令)
  2. 条件展示(使用v-show指令)
  3. 动态组件
  4. 组件根节点

CSS过渡的基础用法:

<style>
    .ikun-enter-active,.ikun-leave-active{
        transition: opacity 2s;
    }
    .iukn-enter,.ikun-leave-to{
        opacity: 0;
    }
</style>
<div id="element">
    <div>
        <button v-on:click="show=!show">切换</button>
        <transition name="ikun">
            <p v-if="show">荔枝,你让我拿什么荔枝啊?</p>
        </transition>
    </div>
</div>

<script src="http://60.205.187.0/vue/vue.js"></script>
<script type="text/javascript">

    //创建根实例
    var demo = new Vue({
        el: '#element',
        data: {
           show:true
        }
    })

</script>

 ​​​​

2、过渡的类名介绍: 

class类名 说明
v-enter 定义进入过渡的开始状态,在元素被插入之前生效,在元素插入的下一帧移除
v-enter-active 定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡、动画完成之后移除。这个类可以被用来定义进入过渡的过程时间、延迟和曲线函数
v-enter-to 定义进入过渡的结束状态。在元素被插入之后下一帧生效(与此同时v-enter被移除),在过渡、动画完成之后移除
v-leave 定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除
v-leave-active 定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡、动画完成之后移除。这个类可以被用来定义离开过渡的过程时间、延迟和曲线函数
v-leave-to 定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效(与此同时v-leave被移除),在过渡、动画完成之后移除

 对于这些在过渡中切换的类名来说,如果使用一个没有名字的<transition>,则v-是这些类名的默认前缀。

3、CSS动画

CSS动画和的用法和CSS过度类似,但是在动画中v-enter类名在节点插入DOM后不会立即删除,而是在animationend事件触发时删除。以缩放的动画形式隐藏和显示文字的示例代码如下:

<style>
    p{
        font: 30px;
        margin: 30px auto;
        font-weight: 500;
        color: green;
    }
    /**设置animation属性的参数**/
    .ikun-enter-active{
        animation: scaling 1s;
    }
    .ikun-leave-active{
        animation: scaling 1s reverse;
    }
    /**设置元素的缩放转换**/
    @keyframes scaling{
        0%{
            transform: scale(0);
        }
        50%{
            transform: scale(1.2);
        }
        100%{
            transform: scale(1);
        }
    }
</style>
<div id="element">
    <div>
        <button v-on:click="show=!show">切换</button>
        <transition name="ikun">
            <p v-if="show">他拿姜拿到手软,你打字打到手软,所以这就是区别。你有什么资格黑他?</p>
        </transition>
    </div>
</div>

<script src="http://60.205.187.0/vue/vue.js"></script>
<script type="text/javascript">

    //创建根实例
    var demo = new Vue({
        el: '#element',
        data: {
           show:true
        }
    })

</script>

  

4、自定义过渡的类名:

除了使用普通的类名(如*-enter、*-leave)之外,也可以自定义过渡类名。自定义过渡的类名的优先级高于普通的类名。通过自定义普通过渡类名可以使用过渡系统和其它第三方CSS动画库(如animate.css)的组合。自定义过渡类名可以通过以下6个属性实现:

  1. enter-class
  2. enter-active-class
  3. entet-to-class
  4. leave-class
  5. leave-active-class
  6. leave-to-class 

 使用示例:

<link href="https://unpkg.com/animate.css@3.5.1/animate.min.css" rel="stylesheet" type="text/css">
<style>
    p {
        font: 30px "微软雅黑";
        margin: 30px auto;
        font-weight: 500;
        color: green;
        
    }
</style>
<div id="element" align="center">
    <button v-on:click="show=!show">切换</button>
    <transition name="rotate" enter-active-class="animated rotateIn" leave-active-class="animated rotateOut">
        <p v-if="show">他拿姜拿到手软,你打字打到手软,所以这就是区别。你有什么资格黑他?</p>
    </transition>
</div>

<script src="http://60.205.187.0/vue/vue.js"></script>
<script type="text/javascript">

    //创建根实例
    var demo = new Vue({
        el: '#element',
        data: {
            show: true
        }
    })

</script>

5、元素过渡使用JavaScript钩子函数

元素过渡还可以使用JavaScript钩子函数来实现,实现文字显示和隐藏时的不同效果示例:

<style>
    p{
        font: 30px;
        margin: 30px auto;
        font-weight: 500;
        color: green;
    }
    /**设置元素的缩放转换**/
    @keyframes scaling{
        0%{
            transform: scale(0);
        }
        50%{
            transform: scale(1.2);
        }
        100%{
            transform: scale(1);
        }
    }
    /**创建旋转动画**/
    @-webkit-keyframes rotate{
        0%{
            -webkit-transform:rotateZ(0) scale(1);
        }
        50%{
            -webkit-transform:rotateZ(350deg) scale(0.6);
        }
        100%{
            -webkit-transform:rotateZ(720deg) scale(0.1);
        }
    }
</style>
<div id="element" align="center">
    <div>
        <button v-on:click="show=!show">切换</button>
        <transition v-on:enter="enter" v-on:leave="leave" v-on:after-leave="afterLeave">
            <p v-if="show">作为一名ikun真的已经麻木了 ,解释没用,去反驳得到的只会是一堆表情包</p>
        </transition>
    </div>
</div>

<script src="http://60.205.187.0/vue/vue.js"></script>
<script type="text/javascript">

    //创建根实例
    var demo = new Vue({
        el: '#element',
        data: {
           show:false
        },
        methods:{
            enter:function(el,done){
                el.style.opacity=1;
                el.style.animation='scaling 1s' //实现缩放
            },
            leave:function(el,done){
                el.style.animation='rotate 2s linear'   //实现旋转
                setTimeout(function(){
                    done()
                },2000)
            },
            afterLeave:function(el){    
                el.style.opacity=0;     //在leave函数中触发回调后执行afterLeave函数
            }
        }
    })

</script>

多元素过渡

 1、基础用法:

最常见的多元素过渡是一个列表和描述这个列表为空消息的元素之间的过渡。在此处理多元素过渡时可以使用v-if和v-else。示例:

<style>
    .ikun-enter-active,.ikun-leave-active{
        transition: opacity 0.5s;
    }
    .iukn-enter,.ikun-leave-to{
        opacity: 0;
    }
</style>
<div id="element">
    <div>
        <button v-on:click="clear">清空</button>
        <transition name="ikun">
            <ol v-if="items.length > 0">
                <li v-for="item in items">{{item}}</li>
            </ol>
            <p v-else>列表为空</p>
        </transition>
    </div>
</div>

<script src="http://60.205.187.0/vue/vue.js"></script>
<script type="text/javascript">

    //创建根实例
    var demo = new Vue({
        el: '#element',
        data: {
           items:['唱','跳','rap','篮球']
        },
        methods:{
            clear:function(){
                this.items.splice(0);//清空数组
            }
        }
    })

</script>

 2、key属性

        当有相同标签名的多个元素进行切换时,需要使用key属性设置唯一的值来标记以让Vue来区分他们。示例:

<style>
    .ikun-enter-active,.ikun-leave-active{
        transition: opacity 1s;
    }
    .iukn-enter,.ikun-leave-to{
        opacity: 0;
    }
</style>
<div id="element">
    <div>
        <button v-on:click="show=!show">切换</button>
        <transition name="ikun">
            <p v-if="show" key="lizhi">荔枝,你让我拿什么荔枝啊?</p>
            <p v-else key="kun">北冥有鱼,其名为鲲</p>
        </transition>
    </div>
</div>

<script src="http://60.205.187.0/vue/vue.js"></script>
<script type="text/javascript">

    //创建根实例
    var demo = new Vue({
        el: '#element',
        data: {
           show:true
        }
    })

</script>

3、过渡模式

在<transition>的默认行为中,元素的进入和离开是同时发生的。由于同时生效的进入和离开的过渡不能满足所有要求,所以Vue.js提供了如下两种过渡模式:

  1. in-out :新元素先进行过渡,完成之后当前元素过渡离开
  2. out-int :当前元素先进行过渡,完成之后新元素过渡进入
<style>
    .ikun-enter-active,.ikun-leave-active{
        transition: opacity 1s;
    }
    .iukn-enter,.ikun-leave-to{
        opacity: 0;
    }
</style>
<div id="element">
    <div>
        
        <transition name="ikun" mode="out-in">
            <button v-on:click="show=!show" :key="show">{{show ? '显示':'隐藏'}}</button>
        </transition>
    </div>
</div>

<script src="http://60.205.187.0/vue/vue.js"></script>
<script type="text/javascript">

    //创建根实例
    var demo = new Vue({
        el: '#element',
        data: {
           show:true
        }
    })

</script>

多组件过渡

多个组件的过渡不需要使用key属性,只需要使用动态组件,示例如下: 

<style>
    .ikun-enter-active,.ikun-leave-active{
        transition: opacity 1s;
    }
    .iukn-enter,.ikun-leave-to{
        opacity: 0;
    }
</style>
<div id="element">
    <div>
        <button v-on:click="change">切换组件</button>
        <transition name="ikun" mode="out-in">
            <component :is="componentName"></component>
        </transition>
    </div>
</div>

<script src="http://60.205.187.0/vue/vue.js"></script>
<script type="text/javascript">

    //创建根实例
    var demo = new Vue({
        el: '#element',
        data: {
           componentName:'componentA'
        },
        components:{
            componentA:{
                template:'<p>组件A</p>'
            },
            componentB:{
                template:'<p>组件B</p>'
            }
        },
        methods:{
            change:function(){
                this.componentName=this.componentName=='componentA'?'componentB':'componentA';
            }
        }
    })

</script>

列表过渡 

实现列表过渡需要使用v-for和<transition-group>组件,该组件的特点如下。

  1. 与<transition>组件不同,它会以一个真实元素呈现,默认为一个<span>元素。可以通过tag属性更换为其它元素
  2.  过渡模式不可用,因为不再相互切换特有的元素
  3. 列表中的元素需要提供唯一的key属性值

实现数字列表中插入和移除数字时的过渡效果,示例如下:

<style>

    .list-item{
        display: inline-block;
        margin-right: 10px;
        background-color: darkgray;
        width: 30px;
        height: 30px;
        line-height: 30px;
        text-align: center;
        color: greenyellow;
    }
    /**插入过程和移除过程的过渡效果**/
    .ikun-enter-active,.ikun-leave-active{
        transition: all 1s;
    }
    /**开始插入和移除结束时的状态**/
    .iukn-enter,.ikun-leave-to{
        opacity: 0;
        transform: translateY(30px);
    }
</style>
<div id="element">
    <div>
        <button v-on:click="add">插入一个数字</button>
        <button v-on:click="remove">移除一个数字</button>
        <transition-group name="ikun" tag="p">
            <span v-for="item in items" v-bind:key="item" class="list-item">
                {{item}}
            </span>
        </transition-group>
    </div>
</div>

<script src="http://60.205.187.0/vue/vue.js"></script>
<script type="text/javascript">

    //创建根实例
    var demo = new Vue({
        el: '#element',
        data: {
           items:[1,2,3,4,5,6],
           nextNum:7
        },
        methods:{
            //生成随机索引
            randomNumber:function(){
                return Math.floor(Math.random*this.items.length)
            },
            //添加数字
            add:function(){
                this.items.splice(this.randomNumber(),0,this.nextNum++)
            },
            //移除数字
            remove:function(){
                this.items.splice(this.randomNumber(),1)
            }
        }
    })

</script>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue的过渡 的相关文章

  • 为什么我的淘汰单选按钮在另一个具有点击绑定的元素内时会失败?

    我有一个单选按钮列表 我想要点击 li 他们还检查单选按钮 这一切都有效 直到我放了一个name单选元素上的属性 然后我的代码停止工作 我的代码如下所示 ul li li ul li
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • 在重复内容区域添加

    我有一个菜单组件 简单地说 它接受一个带有一系列选项的道具 并为每个选项在菜单中呈现一个项目 我希望能够根据用例自定义每个菜单项内的标记 因此我在菜单项元素内使用了占位符 你可以在这个中看到一个例子fiddle https jsfiddle
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • React-Redux:state.setIn() 和 state.set() 有什么区别?

    我见过使用setIn and set 在一些react redux代码中 state setIn state set 我在这里找到了一些文档https facebook github io immutable js https facebo
  • 有没有办法使用 Rspec/Capybara/Selenium 将 javascript console.errors 打印到终端?

    当我运行 rspec 时 是否可以让 capybara selenium 向 rspec 报告任何 javascript console errors 和其他异常 我有一大堆测试失败 但当我手动测试它时 我的应用程序正在运行 如果不知道仅在
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • 如何纠正流警告:解构(缺少注释)

    我正在编写一个小型 React Native 应用程序 并且正在尝试使用 Flow 但我无法在任何地方真正获得有关它的正确教程 我不断收到错误 destructuring Missing annotation 有关 station 这段代码
  • 尝试将数据存储在点击器网站中

    我正在尝试存储一个名为的变量score无论何时刷新 您都会一次又一次地使用它 我不明白的是它的代码是什么 我尝试了一些方法 但似乎都不起作用 这是我的答题器网站 但是当我尝试使用 JavaScript 来存储它时 它不起作用window o
  • Chrome 扩展程序在代码中使用 client_secret

    我正在开发具有自己的 oAuth 授权的 Google Chrome 扩展 当然 我必须使用 client id 和 client secret 作为请求令牌 有什么办法可以向用户隐藏这些数据吗 由于此请求只是 javascript 源代码
  • 为什么我们在打字稿中使用 HTMLInputElement ?

    我们为什么使用 document getElementById ipv as HTMLInputElement value 代替 document getElementById ipv value 功能getElementById返回具有类
  • 将 UMD Javascript 模块导入浏览器

    你好 我正在对 RxJS 进行一些研究 我可以通过在浏览器中引用它来使用该库 如下所示 它使用全局对象命名空间变量 Rx 导入 我可以制作可观察的东西并做所有有趣的事情 当我将 src 更改为指向最新的 UMD 文件时 一切都会崩溃 如下所
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • Vue 和 Vuex:处理依赖的计算属性

    我的应用程序是一个使用 Vuex 在 Vue 中构建的精简电子表格 关键组件是TableCollection Table and Row The TableCollection有一个包含多个的数组Table对象 每个Table有一个包含多个
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • 用于交互式图形绘制的轻量级 JavaScript 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣了解用于绘制交互式图表的最轻量级 javascript 库 我掌握的数据主要是与海洋研究相关的科学数据 我知道一些 jquery
  • JavaScript 相对路径

    在第一个 html 文件中 我使用了一个变量类别链接 var categoryLinks Career prospects http localhost Landa DirectManagers 511 HelenaChechik Dim0

随机推荐

  • 树的广度遍历

    在二叉树的遍历当中 有一种遍历方法是不常见的 那就是广度遍历 和其他三种遍历方法不同 二叉树的广度遍历需要额外的数据结构来帮助一下 什么数据结构呢 那就是队列 因为队列具有先进先出的特点 这个特点要求我们在遍历新的一层数据之前 必须对上一次
  • java Integer类型比较

    在比较两个new的Integer对象时 不能直接使用 这里比较的是对象的地址 应该调用 equals 方法 Integer i new Integer 888 Integer j new Integer 888 System out pri
  • uniapp 中使用jssdk正确姿势

    这是基于企业项目实战分享 npm方式使用下方进行安装 npm install jweixin module save 安装在项目中的效果如图 接下自己定义个js 引入我们用npm引入的模块 jwx 代码 let jweixin requir
  • html总结

  • 两个常用的数据标准化方法及Matlab和Python实现

    参考 数据归一化和两种常用的归一化方法 博主对原文进行了润色并添加了Matlab和Python实现 数据标准化处理是数据挖掘的一项基础工作 不同评价指标往往具有不同的量纲和量纲单位 这样的情况会影响到数据分析的结果 为了消除指标 特征 之间
  • 【Linux_】环境变量

    Linux 环境变量 心有所向 日复一日 必有精进 专栏 Linux 作者 沂沐沐 目录 Linux 环境变量 什么是环境变量 常见变量 查看环境变量方法 环境变量相关的命令 通过系统调用获取或设置环境变量 环境变量通常是具有全局属性的 导
  • Javascript设计模式-17-装饰者模式

    Javascript 设计模式 17 装饰者模式 简介 装饰者模式可以动态的给某个对象添加一些额外的职责 而不会影响从这个类中派生出的其他对象 优势 传统的面向对象语言中 给对象添加功能常常使用继承的方式 但是继承的方式并不灵活 还会带来许
  • C语言 操作符详解 上

    C语言中操作符介绍 表达式求值 操作符分类 1 算数操作符 2 移位操作符 lt lt gt gt 3 位操作符 4 赋值操作符 5 单目操作符 sizeof 6 关系操作符 gt lt gt lt 7 逻辑操作符 8 条件操作符 9 逗号
  • Swagger与Knife4j学习笔记

    Swagger 介绍 在前后端分离开发的过程中 前端和后端需要进行 API 对接进行交互 就需要一个 API 规范文档 方便前后端的交互 但 API 文档不能根据代码的变化发生实时动态的改变 这样后端修改了接口 前端不能及时获取最新的接口
  • 百度搜索自动补全(百度搜索常见api)

    一 百度搜索常用api 百度搜索常用api 一 搜索关键字自动补全 一 数据源 https sp0 baidu com 5a1Fazu8AA54nxGko9WTAnF6hhy su wd 关键词 json 1 二 代码 可以使用前端插件 B
  • DDT数据驱动+yaml/csv(自动化测试,接口测试)

    目录 1 ddt读取yaml文件 2 ddt读取csv文件 3 ddt式测试报告怎么填用例描述 背景 对于输入框来言 使用等价类边界值 场景法等进行数据输入 接口相同 输入的内容都非常相似 却有不同的响应结果 如果我们对于每次输入都编写一条
  • Linux中的$0、$1、$@、$?、$*等特殊变量介绍

    特殊变量 是传给脚本的参数个数 0 是脚本本身的名字 1 是传递给该shell脚本的第一个参数 2 是传递给该shell脚本的第二个参数 是传给脚本的所有参数的列表 是以一个单字符串显示所有向脚本传递的参数 与位置变量不同 参数可超过9个
  • Invalid prop: type check failed for prop “data“. Expected Array, got Object[已解决]

    Vue warn Invalid prop type check failed for prop data Expected Array got Object 要处理这个bug就必须先明白这个bug到底是什么类型是怎么一回事 那字面意思就是
  • Mirai环境搭建

    20200805 引言 关于Mirai的环境搭建 我记得能搜到很多结果 不过我当时并没有想要启动mirai的所有功能 毕竟其实他的代码也有缺陷 现在想扫出来结果也有点难了 后面可能还是需要这些功能来辅助扫描结果 其他功能还是要开启 这里先记
  • C语言基础_文件操作-1

    目录 写在前面 学习目标 学习总结 正文 1 文件打开 关闭 2 getc putc 3 fprintf fscanf gets不安全 用fgets 4 fgets gputs 5 文件光标操作 a fseek ftell long范围内操
  • C++语言分号的使用

    C 语言中 表达式的一部分能够组成独立的语句 所以必须加分号分割 c a b 成立 c a b 也成立 if 1 1 do something 成立 if 1 1 do something 也成立 class foo bar 成立 含义为独
  • c++能不能给类的成员变量在声明的时候初始化?

    能 可能早先的版本不能 但是c 11标准下能 有人说在声明的时候初始化相当于在构造函数中初始化 其实不是的 成员变量初始化的顺序为 先进行声明时初始化 然后进行初始化列表初始化 最后进行构造函数初始化 如下代码 另外初始化列表中初始化的顺序
  • STM32启动BOOT0 BOOT1设置方法

    转载自 https www jianshu com p 38c4a90bac19 不同的下载方式对应STM32启动方式也不同 如下图是STM32三种启动方式 第一种启动方式是最常用的用户FLASH启动 正常工作就在这种模式下 STM32的F
  • webpack4 sideEffects实战轻松搞懂

    sideEffects 译作副作用 函数副作用是指函数在正常工作任务之外对外部环境所施加的影响 具体地说 函数副作用是指函数被调用 完成了函数既定的计算任务 但同时因为访问了外部数据 尤其是因为对外部数据进行了写操作 从而一定程度地改变了系
  • Vue的过渡

    目录 单元素过渡 1 css过渡 2 过渡的类名介绍 3 CSS动画 4 自定义过渡的类名 5 元素过渡使用JavaScript钩子函数 多元素过渡 1 基础用法 2 key属性 3 过渡模式 多组件过渡 列表过渡 单元素过渡 1 css过