多元素过渡、列表过渡、复用过渡、异步组件你会几个?

举报
前端老实人 发表于 2022/01/12 09:37:01 2022/01/12
【摘要】 过渡_多元素过渡当切换展示的元素标签名相同时,需要给每一个元素设置不同的key值,否则Vue为了效率只会替换相同标签内部的内容。<transition> <div v-if="show" key="world">hello world</div> <div v-else key="shanshan">hello shanshan</div></transition>在一些场景中,可以通...

过渡_多元素过渡

当切换展示的元素标签名相同时,需要给每一个元素设置不同的key值,否则Vue为了效率只会替换相同标签内部的内容。

<transition>
  <div v-if="show" key="world">hello world</div>
  <div v-else key="shanshan">hello shanshan</div>
</transition>

在一些场景中,可以通过给同一个元素的key值设置不同的状态来替代 v-if 和 v-else。如:

<transition>
  <div :key="keyName">hello {{ key Name}}</div>
</transition>
keyName: 'world',

过渡模式

Vue提供一个一个 mode 特性,可以给多个元素过渡应用不同的模式,mode 的值可为:

  • in-out:新元素先进行过渡,完成之后当前元素过渡离开。
  • out-in:当前元素先进行过渡,完成之后新元素过渡进入。

多组件过渡

我们可以使用动态组件切换展示不同的组件。

过渡_列表过渡

当想要给一个列表添加过渡动效时,我们可以使用 <transition-group> 组件。

该组件的特点:

  • 不同于 <transition>,它会以一个真实元素呈现:默认为一个 <span>。你也可以通过 tag attribute 更换为其他元素。
  • 过渡模式不可用,因为我们不再相互切换特有的元素。
  • 内部元素 总是需要 提供唯一的 key 属性值。
  • CSS 过渡的类将会应用在内部的元素中,而不是这个组/容器本身。

列表的排序过渡

<transition-group> 组件提供了一个新的特性:v-move,它会在元素改变定位的过程中应用。 如何使用?通过类名即可设置:.v-move {}。 当给 <transition-group> 设置 name 特性时,例如name为fade,则 v-move 在使用时,需要替换为 fade-move。

注意:当移除一个列表元素时,需要将移除的元素脱离文档流,否则,要溢出的元素在移除过渡中一直处于文档流中,会影响到后面元素的move过渡效果。

内部的实现:Vue 使用了一个叫 FLIP 简单的动画队列,使用 transforms 将元素从之前的位置平滑过渡新的位置。

需要注意的是使用 FLIP 过渡的元素不能设置为 display: inline 。作为替代方案,可以设置为 display: inline-block 或者放置于 flex 中。

列表的交错过渡

如果要给列表中的元素,应用更丰富的过渡效果,可以配合JavaScript钩子。

过渡_复用过渡

过渡可以通过 Vue 的组件系统实现复用。要创建一个可复用过渡组件,你需要做的就是将 <transition> 或者 <transition-group> 作为根组件,然后将任何子组件放置在其中就可以了。

注意:当使用函数式组件复用过渡时,不要设置css作用域。

组件_异步组件

在项目中,有些组件不会在第一次进入首屏时加载,而是当执行了某些操作时,才会加载进来,所以此时,我们可以将该组件设置成异步加载,什么时候用,什么时候再加载进来,以达到提升首屏性能的目的。

使用方法:

components: {
  AsyncCmp: () => import (url);
}

将多个需要同时加载的组件合并到一个文件中:

components: {
  AsyncCmp1: () => import( /* webpackChunkName: "async" */  'url'),
  AsyncCmp2: () => import( /* webpackChunkName: "async" */  'url'),
}

异步加载的文件,会在link标签上设置 el=“prefech”。浏览器会在空闲时间内下载对应的资源,使用时可以直接从缓存中获取。与之对应的 el=“preload”,会及时下载对应的资源。

最后

如果对您有帮助,希望能给个👍评论/收藏/三连!

博主为人老实,无偿解答问题哦❤

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。