当前位置: 首页 > 知识库问答 >
问题:

前端 - Vue3中是怎么处理列表过渡v-move效果的?

葛晔
2024-02-08

Vue3中是怎么处理列表过渡v-move效果的

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title>Vue 3 List Transition Demo</title>  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>  <style>    .list-move {      transition: transform 1s;    }    .list-item {      display: inline-block;      margin-right: 10px;      transition: all 1s;    }    .list-enter-active,    .list-leave-active {      transition: all 1s;    }    .list-enter-from,    .list-leave-to {      opacity: 0;      transform: translateY(30px);    }  </style></head><body>  <div id="app">    <button @click="shuffle">Shuffle</button>    <button @click="add">Add</button>    <button @click="remove">Remove</button>    <transition-group name="list" tag="p" class="list">      <span v-for="item in items" :key="item" class="list-item">        {{ item }}      </span>    </transition-group>  </div>  <script>    const { createApp, ref } = Vue;    createApp({      setup() {        const items = ref([1, 2, 3, 4, 5, 6, 7, 8, 9]);        const nextNum = ref(10);        function shuffle() {          items.value = _.shuffle(items.value);        }        function add() {          const index = Math.floor(Math.random() * items.value.length);          items.value.splice(index, 0, nextNum.value++);        }        function remove() {          const index = Math.floor(Math.random() * items.value.length);          if (items.value.length > 1) {            items.value.splice(index, 1);          }        }        return { items, shuffle, add, remove };      },    }).mount('#app');  </script></body></html>

https://v2.cn.vuejs.org/v2/guide/transitions.html
image.png
我期望点击remove时达到Vue2中这种效果,后面补位的元素可以平滑移动到缺位,但是在vue3中好像没有实现、

共有1个答案

谢夜洛
2024-02-08

在 Vue 3 中,可以使用 <transition-group> 组件来处理列表的过渡效果。<transition-group> 组件会自动为每个列表项添加或删除一个过渡效果。

在你的示例中,你已经使用了 <transition-group> 组件,并且设置了 name 属性为 "list"。这意味着对于列表中的每个项,Vue 将添加一个名为 "list-move" 的类名,该类名用于控制列表项的过渡效果。

要实现类似于 Vue 2 中的 v-move 效果,你可以在 CSS 中定义过渡效果的样式。在你的示例中,你已经定义了一些过渡效果的样式,例如 .list-enter-active.list-leave-active.list-enter-from.list-leave-to。这些样式定义了列表项进入和离开时的过渡效果。

如果你希望在 Vue 3 中实现类似于 Vue 2 中的 v-move 效果,你可以尝试使用 CSS 动画或转换来实现平滑的移动效果。例如,你可以使用 CSS 动画来控制列表项的移动路径和速度。

另外,需要注意的是,Vue 3 中的 <transition-group> 组件与 Vue 2 中的实现有所不同。在 Vue 3 中,<transition-group> 组件使用虚拟节点(Virtual Node)来优化性能,因此对于较大的列表,Vue 3 的过渡效果可能会更加流畅。

总结起来,要处理列表的过渡效果,你可以使用 <transition-group> 组件并定义相应的 CSS 样式来实现平滑的移动效果。对于较大的列表,Vue 3 的过渡效果可能会更加流畅。

 类似资料:
  • CSS3 过渡是元素从一种样式逐渐改变为另一种的效果。 尽管 CSS3 过渡效果是足够的过渡的一个元素,但是 text-transform 属性可以提高 CSS3 过渡效果的风格。 主要有四个属性的CSS3转换效果,已被描述如下: transition-property transition-duration transition-timing-function transition-delay

  • 主要内容:使用案例过渡效果(Transition)插件提供了简单的过渡效果。 如果您想要单独引用该插件的功能,那么除了其他的 JS 文件,您还需要引用 transition.js。或者,正如 Bootstrap 插件概览 一章中所提到,您可以引用 bootstrap.js 或压缩版的 bootstrap.min.js。 Transition.js 是 transitionEnd 事件和 CSS 过渡效果模拟器的基本

  • 主要内容:1. transition-property,2. transition-duration,3. transition-timing-function,4. transition-delay,5. transition通常当 CSS 的属性值更改后,浏览器会立即更新相应的样式,例如当鼠标悬停在元素上时,通过 :hover 选择器定义的样式会立即应用在元素上。在 CSS3 中加入了一项过渡功能,通过该功能您可以将元素从一种样式在指定时间内平滑的过渡到另一种样式,类似于简单的动画,但无需借

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

  • After Effects 附带的这一类别的第三方效果: CC 玻璃擦除效果 CC 网格擦除效果 CC 图像擦除效果 CC 锯齿效果 CC 照明式擦除效果 CC 光线扫描效果 CC 径向缩放擦除效果 CC 缩放擦除效果 CC 龙卷风效果 CC 自动弯曲效果 请参阅 After Effects 中包含的第三方增效工具。 有关过渡和过渡效果的在线资源 有关如何使用动画预设创建自定义过渡的示例,请参阅

  • 点击圆环的哪里,哪里外面就会出现一条弧线。