【问题标题】:Vue transition group use enter/leave instead of moveVue 过渡组使用进入/离开而不是移动
【发布时间】:2019-11-13 09:24:01
【问题描述】:

使用vue transition-groups,有没有办法触发离开+进入过渡而不是移动元素的移动过渡?

它应该离开,然后进入新位置。移动转换似乎只适用于转换。

游乐场:https://codepen.io/anon/pen/WqJEmV

HTML:

<div id="flip-list-demo" class="demo">
  <button v-on:click="shuffle">Shuffle</button>
  <transition-group name="flip-list" tag="ul">
    <li v-for="item in items" v-bind:key="item">
      {{ item }}
    </li>
  </transition-group>
</div>

JS:

new Vue({
  el: '#flip-list-demo',
  data: {
    items: [1,2,3,4,5,6,7,8,9]
  },
  methods: {
    shuffle: function () {
      this.items = _.shuffle(this.items)
    }
  }
})

CSS:

/** Should NOT use this: **/
.flip-list-move {
  transition: transform 1s;
}

/** Should use this instead: **/
.flip-list-enter-active, .flip-list-leave-active {
  transition: all 1s;
}

.flip-list-enter {
  opacity: 0;
  transform: translateX(80px);
}

.flip-list-leave-to {
  opacity: 0;
  transform: translateY(30px);
}

【问题讨论】:

  • .flip-list-move有什么问题你有什么不想用的理由
  • @SirDad 这个动作似乎只适用于变换,我需要不同的动画

标签: javascript css vue.js vue-transitions


【解决方案1】:

据我所知:

  • 添加新项目时触发输入
  • 移除项目时触发离开
  • 订单更改时触发移动

如果您只想触发进入离开转换,则必须从数组中添加/删除项目,而不是随机播放。

这是一个例子:

shuffle: function () {
    this.items = [1,3,5,7,9];
}

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,所以我想我会在这里为以后发现此问题的其他人发帖:

    对我有用的解决方案是利用 key 属性强制 vue 将移动的项目视为“新”项目。这样enter/leave 动画就会被触发而不是move

    我叉了你的笔来展示它是如何工作的:https://codepen.io/josh7weaver/pen/eYOXxed?editors=1010

    如您所见,这种方法的一个缺点是您必须增加数据模型的复杂性才能使其正常工作。即在你有一个简单的数组之前,在我们有一个对象数组之后,因为每个对象都需要负责自己的键。

    有很多不同的方法可以为你想要让 vue 认为是“新”的项目生成唯一 ID,但我使用的方法只是从公共要点复制和粘贴。

    希望对你有帮助!

    【讨论】:

    • @julius - 如果这对您有用,您可以将其标记为解决方案,以便对其他人更清楚吗?谢谢!
    猜你喜欢
    • 2021-07-28
    • 2021-07-01
    • 2021-11-04
    • 1970-01-01
    • 2019-12-18
    • 2013-07-01
    • 2019-10-03
    • 2020-06-23
    • 2017-04-29
    相关资源
    最近更新 更多