• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > Vue.2.0.5过渡效果使用技巧

Vue.2.0.5过渡效果使用技巧

作者:jiangxiaobo 字体:[增加 减小] 来源:互联网 时间:2017-05-11

jiangxiaobo通过本文主要向大家介绍了Vue.2.0.5过渡效果使用技巧等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

概述

Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。

包括以下工具:

  1. 在 CSS 过渡和动画中自动应用 class
  2. 可以配合使用第三方 CSS 动画库,如 Animate.css
  3. 在过渡钩子函数中使用 JavaScript 直接操作 DOM
  4. 可以配合使用第三方 JavaScript 动画库,如 Velocity.js

在这里,我们只会讲到进入、离开和列表的过渡, 你也可以看下一节的 管理过渡状态.

单元素/组件的过渡

Vue 提供了 transition 的封装组件,在下列情形中,可以给任何元素和组件添加 entering/leaving 过渡

  • 条件渲染 (使用 v-if)
  • 条件展示 (使用 v-show)
  • 动态组件
  • 组件根节点

这里是一个典型的例子: 

<div id="demo">
 <button v-on:click="show = !show">
 Toggle
 </button>
 <transition name="fade">
 <p v-if="show">hello</p>
 </transition>
</div>
</div>
new Vue({
 el: '#demo',
 data: {
 show: true
 }
})
</div>
.fade-enter-active, .fade-leave-active {
 transition: opacity .5s
}
.fade-enter, .fade-leave-active {
 opacity: 0
}
</div>

元素封装成过渡组件之后,在遇到插入或删除时,Vue 将

1.自动嗅探目标元素是否有 CSS 过渡或动画,并在合适时添加/删除 CSS 类名。

2.如果过渡组件设置了过渡的 JavaScript 钩子函数,会在相应的阶段调用钩子函数。

3.如果没有找到 JavaScript 钩子并且也没有检测到 CSS 过渡/动画,DOM 操作(插入/删除)在下一帧中立即执行。(注意:此指浏览器逐帧动画机制,与 Vue,和Vue的nextTick 概念不同)

过渡的-CSS-类名

会有 4 个(CSS)类名在 enter/leave 的过渡中切换

1.v-enter: 定义进入过渡的开始状态。在元素被插入时生效,在下一个帧移除。

2.v-enter-active: 定义进入过渡的结束状态。在元素被插入时生效,在transition/animation 完成之后移除。

3.v-leave: 定义离开过渡的开始状态。在离开过渡被触发时生效,在下一个帧移除。

4.v-leave-active: 定义离开过渡的结束状态。在离开过渡被触发时生效,在transition/animation 完成之后移除。

对于这些在 enter/leave 过渡中切换的类名,v- 是这些类名的前缀。使用<name="my-transition>" 可以重置前缀,比如 v-enter 替换为my-transition-enter。

v-enter-active 和 v-leave-active 可以控制 进入/离开 过渡的不同阶段,在下面章节会有个示例说明。

CSS 过渡

常用的过渡都是使用 CSS 过渡。

下面是一个简单例子:

<div id="example-1">
 <button @click="show = !show">
 Toggle render
 </button>
 <transition name="slide-fade">
 <p v-if="show">hello</p>
 </transition>
</div>
</div>
new Vue({
 el: '#example-1',
 data: {
 show: true
 }
})
</div>
/* 可以设置不同的进入和离开动画 */
/* 设置持续时间和动画函数 */
.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-active {
 padding-left: 10px;
 opacity: 0;
}
</div>

CSS 动画

CSS 动画用法同 CSS 过渡,区别是在动画中 v-enter 类名在节点插入 DOM 后不会立即删除,而是在 animationend 事件触发时删除。

示例: (省略了兼容性前缀) 

<div id="example-2">
 <button @click="show = !show">Toggle show</button>
 <transition name="bounce">
 <p v-if="show">Look at me!</p>
 </transition>
</div>
</div>
new Vue({
 el: '#example-2',
 data: {
 show: true
 }
})
</div>
.bounce-enter-active {
 animation: bounce-in .5s;
}
.bounce-leave-active {
 animation: bounce-out .5s;
}
@keyframes bounce-in {
 0% {
 transform: scale(0);
 }
 50% {
 transform: scale(1.5);
 }
 100% {
 transform: scale(1);
 }
}
@keyframes bounce-out {
 0% {
 transform: scale(1);
 }
 50% {
 transform: scale(1.5);
 }
 100% {
 transform: scale(0);
 }
}
</div>

自定义过渡类名

我们可以通过以下特性来自定义过渡类名:

  • enter-class
  • enter-active-class
  • leave-class
  • leave-active-class

他们的优先级高于普通的类名,这对于 Vue 的过渡系统和其他第三方 CSS 动画库,如Animate.css 结合使用十分有用。

示例:

<link href="https://unpkg.com/animate.css@3.5.1/animate.min.css" rel="external nofollow" 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>
</div>
new Vue({
 el: '#example-3',
 data: {
 show: true
 }
})
</div>

同时使用 Transitions 和 Animations

Vue 为了知道过渡的完成,必须设置相应的事件监听器。它可以是 transitionend 或animationend ,这取决于给元素应用的 CSS 规则。如果你使用其中任何一种,Vue 能自动识别类型并设置监听。

但是,在一些场景中,你需要给同一个元素同时设置两种过渡动效,比如 animation 很快的被触发并完成了,而 transition 效果还没结束。在这种情况中,你就需要使用type 特性并设置 animation 或 transition 来明确声明你需要 Vue 监听的类型。

JavaScript 钩子

可以在属性中声明 JavaScript 钩子

<transition
 v-on:before-enter="beforeEnter"
 v-on:enter="enter"
 v-on:after-enter="afterEnter"
 v-on:enter-cancelled="enterCancelled"
 v-on:before-leave="beforeLeave"
 v-on:leave="leave"
 v-on:after-leave="afterLeave"
 v-on:leave-cancelled="leaveCancelled"
>
 <!-- ... -->
</transition>
</div>
// ...
methods: {
 // --------
 // 进入中
 // --------
 beforeEnter: function (el) {
 // ...
 },
 // 此回调函数是可选项的设置
 // 与 CSS 结合时使用
 enter: function (el, done) {
 // ...
 done()
 },
 afterEnter: function (el) {
 // ...
 },
 enterCancelled: function (el) {
 // ...
 },
 // --------
 // 离开时
 // --------
 beforeLeave: function (el) {
 // ...
 },
 // 此回调函数是可选项的设置
 // 与 CSS 结合时使用
 leave: function (el, done) {
 // ...
 done()
 },
 afterLeave: function (el) {
 // ...
 },
 // leaveCancelled 只用于 v-show 中
 leaveCancelled: function (el) {
 // ...
 }
}
</div>

这些钩子函数可以结合 CSS transitions/animations 使用,也可以单独使用。

当只用 JavaScript 过渡的时候, 在 enter 和 leave 中,回调函数 done 是必须的 。 否则,它们会被同步调用,过渡会立即完成。

推荐对于仅使用 JavaScript 过渡的元素添加 v-bind:css="false",Vue 会跳过 CSS 的检测。这也可以避免过渡过程中 CSS 的影响。

一个使用 Velocity.js 的简单例子:

<!--
Velocity works very much like jQuery.animate and is
a great option for JavaScript animations
-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.3/velocity.min.js"></script>
<div id="



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-11javascript 正则表达式分组、断言详解
  • 2017-05-11js实现炫酷的左右轮播图
  • 2017-05-11js实现日历与定时器
  • 2017-05-11jQuery中 bind的用法简单介绍
  • 2017-05-11JS日程管理插件FullCalendar简单实例
  • 2017-05-11jQuery编写textarea输入字数限制代码
  • 2017-05-11基本DOM节点操作
  • 2017-05-11微信小程序 页面跳转及数据传递详解
  • 2017-05-11基于JavaScript实现类名的添加与移除
  • 2017-05-11创建一般js对象的几种方式

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • js实现适配不同的屏幕大小
    • JS实现二叉查找树的建立以及一些遍历方法实现
    • JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
    • jQuery使用EasyUi实现三级联动下拉框效果
    • 高效的jQuery代码编写技巧总结
    • 原生js实现倒计时功能(多种格式调用)
    • 使用微信内嵌H5网页解决JS倒计时失效问题
    • jquery选择器
    • 微信小程序 开发之全局配置
    • 原生javascript上传图片带进度条【实例分享】

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有