通过 Vue.js 的过渡系统,可以在元素从 DOM 中插入或移除时自动应用过渡效果。Vue.js 会在适当的时机为你触发 CSS 过渡或动画,你也可以提供相应的 JavaScript 钩子函数在过渡过程中执行自定义的 DOM 操作。
为了应用过渡效果,需要在目标元素上使用 transition 特性:
<div v-if="show" transition="my-transition"></div>
transition 特性可以与下面资源一起用:
•v-if
•v-show
•v-for (只在插入和删除时触发,使用 vue-animated-list 插件)
•动态组件 (介绍见组件)
•在组件的根节点上,并且被 Vue 实例 DOM 方法(如 vm.$appendTo(el))触发。
当插入或删除带有过渡的元素时,Vue 将:
1.尝试以 ID "my-transition" 查找 JavaScript 过渡钩子对象——通过 Vue.transition(id, hooks) 或 transitions 选项注册。如果找到了,将在过渡的不同阶段调用相应的钩子。
2.自动嗅探目标元素是否有 CSS 过渡或动画,并在合适时添加/删除 CSS 类名。
3.如果没有找到 JavaScript 钩子并且也没有检测到 CSS 过渡/动画,DOM 操作(插入/删除)在下一帧中立即执行。
CSS 过渡
示例
典型的 CSS 过渡像这样:
<div v-if="show" transition="expand">hello</div>
然后为 `.expand-transition`, `.expand-enter` 和 `.expand-leave` 添加 CSS 规则:
/* 必需 */.expand-transition { transition: all .3s ease; height: 30px; padding: 10px; background-color: #eee; overflow: hidden;}/* .expand-enter 定义进入的开始状态 *//* .expand-leave 定义离开的结束状态 */.expand-enter, .expand-leave { height: 0; padding: 0 10px; opacity: 0;}
你可以在同一元素上通过动态绑定实现不同的过渡:
<div v-if="show" :transition="transitionName">hello</div>
new Vue({ el: '...', data: { show: false, transitionName: 'fade' }})
另外,可以提供 JavaScript 钩子:
Vue.transition('expand', { beforeEnter: function (el) { el.textContent = 'beforeEnter' }, enter: function (el) { el.textContent = 'enter' }, afterEnter: function (el) { el.textContent = 'afterEnter' }, enterCancelled: function (el) { // handle cancellation }, beforeLeave: function (el) { el.textContent = 'beforeLeave' }, leave: function (el) { el.textContent = 'leave' }, afterLeave: function (el) { el.textContent = 'afterLeave' }, leaveCancelled: function (el) { // handle cancellation }})
过渡的 CSS 类名
类名的添加和切换取决于 transition 特性的值。比如 transition="fade",会有三个 CSS 类名:
1..fade-transition 始终保留在元素上。
2..fade-enter 定义进入过渡的开始状态。只应用一帧然后立即删除。
新闻热点
疑难解答
图片精选