资讯专栏INFORMATION COLUMN

vue中的过渡动画

aaron / 1544人阅读

摘要:前言记一次组件中使用和设置过渡动画总结来说可分为分为版钩子操作类名版钩子操作行内样式版模板结构单个元素自定义名字列表元素注意的直接子元素是渲染出来的版为组件中的属性出现的过程初始态中间态终止态消失的过程以

前言

记一次vue 组件中使用 transition 和 transition-group 设置过渡动画,总结来说可分为分为 name 版, js 钩子操作类名版, js 钩子操作行内样式版...

template模板结构
  // 单个元素
    
      

hello

// 列表元素: 注意group的直接子元素是v-for渲染出来的
name 版,name 为组件中的属性
出现的过程: name-enter(初始态) => name-enter-active(中间态) => name-enter-to(终止态)
消失的过程: name-leave => name-leave-active => name-leave-to

以进场过渡动画为例子

我们可以分别设置 enter 阶段 和 enter-to 阶段的动画
  1.设置进入时需要过渡的属性
  .name-enter
  {
    opacity: 0;
    transform: translateY(30px)
  }
  2.然后在 name-enter-active中设置过渡时间
  .name-enter-active {
    transition: all .3s;
  }
  3.最后在 name-enter-to 中写上终止态属性
    其实终止态的opacity: 1;transform: none; 是默认的,可以不用写
  .name-enter-to {
    opacity: 1;
    transform: translateY(0);
  }
  如果要给列表中的元素设置交错的效果, 元素不多的话可以添加 delay 属性
  .name-enter-active:nth-child(3n+1) {
    transition-delay: 0s;
  }
  .name-enter-active:nth-child(3n+2) {
    transition-delay: .1s;
  }
  .name-enter-active:nth-child(3n+3) {
    transition-delay: .2s;
  }
  离场动画同理...
js 钩子实现过渡动画: 通过操作类名; 就是 name 版的 js 实现
// 例如实现上述列表依次显示
  
// methods: { // 事先定义上述类名 // 在beforeEnter enter afterEnter 钩子中手动操作上述类名 // 初始态 beforeEnter(dom) { dom.classList.add("list-enter", "list-enter-active"); }, // 中间态 enter(dom,done) { // 通过 setTimeout + dataset 实现过渡 let delay = dom.dataset.delay; setTimeout(function () { dom.classList.remove("list-enter"); dom.classList.add("list-enter-to"); //监听 transitionend 事件 var transitionend = window.ontransitionend ? "transitionend" : "webkitTransitionEnd"; dom.addEventListener(transitionend, function onEnd() { // 移除事件 dom.removeEventListener(transitionend, onEnd); //调用done(),表示动画已完成 done() }); }, delay) }, // 终止态 afterEnter(dom) { dom.classList.remove("list-enter-to", "list-enter-active"); } }
js 钩子过渡动画: 通过操作行内属性, 自定义动画
   
// 对应的操作方法; 添加自定义的 dataset,给dom设置css样式;根据需求添加 methods: { // 初始态 beforeEnter(dom) { let { x = 0, y = 0, opacity = 0 } = dom.dataset; dom.style.cssText = `transition: .3s;opacity: ${opacity};transform: translateX(${x}) translateY(${y});`; }, // 中间态 enter(dom,done) { let delay = dom.dataset.delay; setTimeout(function () { dom.style.cssText = `transition: .3s;opacity: 1;transform: translateX(0) translateY(0);`; //监听 transitionend 事件 var transitionend = window.ontransitionend ? "transitionend" : "webkitTransitionEnd"; dom.addEventListener(transitionend, function onEnd() { dom.removeEventListener(transitionend, onEnd); done(); }); }, delay) }, // 终止态 afterEnter(dom) { dom.style.cssText = ""; } }

这里记录一下监听css3的animation动画和transition事件:

webkit-animation动画有三个事件:
    开始事件: webkitAnimationStart
    结束事件: webkitAnimationEnd
    重复运动事件: webkitAnimationIteration

css3的过渡属性transition: 一个事件
    过渡结束: webkitTransitionEnd

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105447.html

相关文章

  • Vue.js进入/离开&列表过度动画

    摘要:包括以下工具在过渡和动画中自动应用可以配合第三方动画库,如在过渡钩子函数中使用直接操作可以配合使用第三方动画库,如在这里,我们只会讲到进入离开和列表的过渡。不仅可以进入和离开动画,还可以改变定位。 概述 Vue在插入、更新或则移除DOM时,提供多种不同方式的应用过渡效果。包括以下工具: *在CSS过渡和动画中自动应用class *可以配合第三方CSS动画库,如Animate.css *...

    thekingisalwaysluc 评论0 收藏0
  • 过渡(1):元素/组件过渡动画

    摘要:在离开进入过渡时,受影响的其他元素应该使用移动过渡为期定义移动过渡。过渡和动画自定义过渡的类名在钩子中使用两个元素之间的过渡今日头条面试分享面试题记录记得点赞分享哦让更多的人看到这里使用了一个动画库和函数式组件。 自定义过渡的类名 另一种情况和Vue过渡执行过程见初始渲染 new Vue({ el: #app-2, data: { taxiCalled:...

    ls0609 评论0 收藏0
  • 过渡(1):元素/组件过渡动画

    摘要:在离开进入过渡时,受影响的其他元素应该使用移动过渡为期定义移动过渡。过渡和动画自定义过渡的类名在钩子中使用两个元素之间的过渡今日头条面试分享面试题记录记得点赞分享哦让更多的人看到这里使用了一个动画库和函数式组件。 自定义过渡的类名 另一种情况和Vue过渡执行过程见初始渲染 new Vue({ el: #app-2, data: { taxiCalled:...

    GraphQuery 评论0 收藏0
  • vue.js起步式(二)

    摘要:当需要和第三方的动画库,比如配合时会非常有用显式声明过渡类型新增需要给过渡元素添加事件侦听器来侦听过渡何时结束。在下例中我们使用注册一个自定义的过渡元素已被插入在动画结束后调用与相同然后用特性中渐近过渡与一起用时可以创建渐近过渡。 8.方法与事件处理器 方法处理器可以用 v-on 指令监听 DOM 事件: Greet 我们绑定了一个单击事件处理器到一个方法 greet。下面在...

    BearyChat 评论0 收藏0

发表评论

0条评论

aaron

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<