首页 > 其他分享 >第二十四篇 vue - 深入组件 - 内置组件 - TransitionGroup

第二十四篇 vue - 深入组件 - 内置组件 - TransitionGroup

时间:2023-04-01 11:59:26浏览次数:52  
标签:TransitionGroup 动画 元素 list leave active 组件 二十四篇

TransitionGroup

<TransitionGroup> 是一个内置组件,用于对 v-for 列表中的元素或组件的插入、移除和顺序改变添加动画效果

的区别

<TransitionGroup> 支持和 <Transition> 基本相同的 props、CSS 过渡 class 和 JavaScript 钩子监听器,但有以下几点区别:

默认情况下,它不会渲染一个容器元素。但你可以通过传入 tag prop 来指定一个元素作为容器元素来渲染。

过渡模式在这里不可用,因为我们不再是在互斥的元素之间进行切换。

列表中的每个元素都必须有一个独一无二的 key attribute。

CSS 过渡 class 会被应用在列表内的元素上,而不是容器元素上

当在 DOM 模板中使用时,组件名需要写为 <transition-group>

进入 / 离开动画

这里是 <TransitionGroup> 对一个 v-for 列表添加进入 / 离开动画的示例

<TransitionGroup name="list" tag="ul">
  <li v-for="item in items" :key="item">
    {{ item }}
  </li>
</TransitionGroup>

.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;
}

渐进延迟列表动画

通过在 JavaScript 钩子中读取元素的 data attribute,我们可以实现带渐进延迟的列表动画。首先,我们把每一个元素的索引渲染为该元素上的一个 data attribute

<TransitionGroup
  tag="ul"
  :css="false"
  @before-enter="onBeforeEnter"
  @enter="onEnter"
  @leave="onLeave"
>
  <li
    v-for="(item, index) in computedList"
    :key="item.msg"
    :data-index="index"
  >
    {{ item.msg }}
  </li>
</TransitionGroup>

接着,在 JavaScript 钩子中,我们基于当前元素的 data attribute 对该元素的进场动画添加一个延迟

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

标签:TransitionGroup,动画,元素,list,leave,active,组件,二十四篇
From: https://www.cnblogs.com/caix-1987/p/17278337.html

相关文章

  • 第二十三篇 vue - 深入组件 - 内置组件 - Transition
    动画组件Transition和TransitionGroupVue提供了两个可以帮助你制作基于状态变化的过渡和动画内置组件1、<Transition>会在一个元素或组件进入和离开DOM时应用动画2、<TransitionGroup>会在一个v-for列表中的元素或组件被插入,移动,或移除时应用动画除了这两个组件,我......
  • 第二十五篇 vue - 深入组件 - 内置组件 - keepAlive
    keepAlive<KeepAlive>是一个内置组件,它的功能是在多个组件间动态切换时缓存被移除的组件实例在平常开发中,有部分组件没有必要多次初始化,这时,我们需要将组件进行持久化,使组件的状态维持不变,在下一次展示时,也不会进行重新初始化组件kee-alive是Vue内置的一个组件,可以使被包含......
  • 第二十七篇 vue - 深入组件 - 内置组件 - Suspense
    Suspense<Suspense>是一个内置组件,用来在组件树中协调对异步依赖的处理。它让我们可以在组件树上层等待下层的多个嵌套异步依赖项解析完成,并可以在等待时渲染一个加载状态<Suspense>是一项实验性功能。它不一定会最终成为稳定功能,并且在稳定之前相关API也可能会发生变化异......
  • 第二十六篇 vue - 深入组件 - 内置组件 - Teleport
    Teleport<Teleport>是一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的DOM结构外层的位置去基本用法有时我们可能会遇到这样的场景:一个组件模板的一部分在逻辑上从属于该组件,但从整个应用视图的角度来看,它在DOM中应该被渲染在整个Vue应用外部的其他地方......
  • 第二十八篇 vue - 深入组件 - 动态组件 - component
    component动态组件就是动态变化的组件,和动态样式一样,通过用户的操作来确定是什么类型的组件。动态样式是绑定:style,动态组件则是绑定:is在vue中,实现Tab切换主要有三种方式:使用动态组件,使用vue-router路由,使用第三方插件。本文将详细介绍Vue动态组件所谓动态组件就是让多......
  • 第二十一篇 vue - 深入组件 - 依赖注入 - provide 和 inject
    Prop逐级透传问题provide和inject可以帮助我们解决这一问题。[1]一个父组件相对于其所有的后代组件,会作为依赖提供者任何后代的组件树,无论层级有多深,都可以注入由父组件提供给整条链路的依赖Prop逐级透传问题通常情况下,当我们需要从父组件向子组件传递数据时,会使用pr......
  • 微信小程序组件化开发教程、微信小程序组件化开发示例代码
    微信小程序中的组件化开发可以使用template和Component两种方式来实现。template模板实现组件template模板是一种很简单的组件化方式,通常用于展示静态的内容。可以将页面中的某一段代码封装为一个template模板,再在需要使用的地方引入该模板即可。下面以一个简单的自定......
  • vue3 - 在单独的项目制作自定义组件插件,支持vite【前提不要使用webpack专属语法】
    1.背景与vue2组件不一样,没有那么随意,如果想要支持vite,那么不要使用webpack专属语法,如defide和 require等2.解决在 package.json文件属性  main配置为插件入口文件位置,至于是js还是ts随意 目录  简单做了个组件  入口文件内容如下importComponentf......
  • 直播流播放组件
    01使用 <Playerid="mycamera"url="xxx.flv"/>02封装第三方库:flv.js播放组件importReact,{useRef,useEffect}from'react';//传入id和链接constPlayer=({id,url})=>{let{current:player}=useRef(null);//实例......
  • RestSharp组件Get请求带body的时候返回数据丢失问题
    postman的复制代码默认就是RestSharp。方便也好用,但是使用get请求并且带Body的时候要注意,返回的数据竟然会有丢失解决办法:stringRequestByGet(stringindex,stringaction,objectparamter){varapi=$"{ElasticsearchUrl}/{index}/{action}";HttpWebRequestre......