百科狗-知识改变命运!
--

TransitionGroup 过渡组 - vue 内置组件

乐乐1年前 (2023-11-21)阅读数 15#技术干货
文章标签元素

TransitionGroup 过渡组

是一个内置组件,设计用于呈现一个列表中的元素或组件的插入、移除和顺序改变的动画效果。

支持和基本相同的prop、CSS 过渡类和JavaScript 钩子监听器,但有以下几点区别:

  • 默认情况下,它不会渲染一个包装器元素。但你可以通过传入tag prop 来指定一个元素作为包装器元素来渲染。
  • 过渡模式(mode="out-in")在这里不可用,因为我们不再是在互斥的元素之间进行切换。
  • 其中的元素总是必须有一个独一无二的key attribute。
  • CSS 过渡类会被应用在其中的每一个元素上,而不是这个组的容器上。
当你是在 DOM 模板中使用时,组件名需要写为


进入/ 离开过渡

这里是对一个v-for列表应用进入/ 离开过渡的示例:

 
  • {{ item }}
  • .list-enter-active,
    .list-leave-active {
      transition: all 0.5s ease;
    }
    .list-enter-from,
    .list-leave-to {
      opacity: 0;
      transform: translateX(30px);
    }
    


    移动过渡

    上面的示例有一些明显的缺陷:当某一项被插入或移除时,它周围的元素会立即发生“跳跃”而不是平稳地移动。我们可以通过添加一些额外的 CSS 规则来解决这个问题:

    .list-move, /* 对移动中的元素应用的过渡 */
    .list-enter-active,
    .list-leave-active {
      transition: all 0.5s ease;
    }
    
    .list-enter-from,
    .list-leave-to {
      opacity: 0;
      transform: translateX(30px);
    }
    
    /* 确保将离开的元素从布局流中删除
      以便能够正确地计算移动的动画。 */
    .list-leave-active {
      position: absolute;
    }
    

    TransitionGroup 过渡组 - vue 内置组件


    交错的列表过渡

    如果通过data attribute 用 JavaScript 来执行过渡时,那么我们也可以实现列表中的交错过渡。首先,我们把某一项的索引作为 DOM 元素上的一个data attribute 呈现出来。

     
  • {{ item.msg }}
  • 接着,在 JavaScript 钩子中,我们基于这个data attribute 对该元素执行一个延迟动画:

    function onEnter(el, done) {
      gsap.to(el, {
        opacity: 1,
        height: '1.6em',
        delay: el.dataset.index * 0.15,
        onComplete: done
      })
    }
    

    鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

    免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

    图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)