美文网首页
常用的Vue列表transition动画

常用的Vue列表transition动画

作者: microkof | 来源:发表于2020-08-02 21:36 被阅读0次

List的item增加、移除动作的动画

虽然官网有类似动画,但是并不是我今天想说的动画。

横向移除

上图是横向移除的动画,而横向添加动画效果是从左平移入屏幕,下面的item让位,我就不再录制动画了。

竖向移除

上图是竖向移除的动画,而竖向增加是竖向移除的反动画,我就不再录制动画了。

实现动画的方法:

<template>
  <div id="app">
    <img
      style="width: 20%;"
      alt="Vue logo"
      src="./assets/logo.png"
      @click="click"
    />
    <transition-group name="list-complete" class="container">
      <div v-for="item in list" :key="item" class="item">
        {{ item }}
      </div>
    </transition-group>
  </div>
</template>

<script>
export default {
  name: "App",
  data() {
    return {
      list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    };
  },
  methods: {
    click() {
      this.list.splice(3, 1);
    }
  }
};
</script>

<style>
.container {
  display: block;
  position: relative;
}

.item {
  transition: all 0.5s;
  margin: 20px;
  text-align: center;
  border: 1px solid #eee;
}

.list-complete-enter,
.list-complete-leave-to {
  opacity: 0;
  transform: translateX(-100%) translateY(-100%);
  /* transform: translate(none, -100%); */
}

.list-complete-leave-active {
  position: absolute;
  left: 0;
  right: 0;
}
</style>

核心代码:

  • .container类的两个声明是必须的,因为它默认是inline,而且为了给item当参照祖先,所以必须设relative

  • item的样式的关键是transition: all 0.5s;,其他不是关键。

  • .list-complete-enter.list-complete-leave-totransform: translateX(-100%) translateY(-100%);保证左向平移。如果是竖向动画,则应改成transform: translate(none, -100%);

  • .list-complete-leave-active的三行声明都是必须的,这保证item占据全宽。

如果想写成SCSS工具类,可以这么写:

@each $dir in (x,y) {
  .list-#{$dir}-ani {
    display: block;
    position: relative;

    > * {
      transition: all 0.5s;
    }

    .list-#{$dir}-ani-enter,
    .list-#{$dir}-ani-leave-to {
      opacity: 0;
      @if $dir == x {
        transform: translateX(-100%) translateY(-100%);
      }
      @else {
        transform: translate(none, -100%);
      }
    }
    .list-#{$dir}-ani-leave-active {
      position: absolute;
      left: 0;
      right: 0;
    }
  }
}

用法:

想x轴动画就list-x-ani,想y轴动画就list-y-ani

nameclass用一样的值。.item负责与动画无关的其他声明。

    <transition-group name="list-x-ani" class="list-x-ani">
      <div v-for="item in list" :key="item" class="item">
        {{ item }}
      </div>
    </transition-group>

相关文章

  • 常用的Vue列表transition动画

    List的item增加、移除动作的动画 虽然官网有类似动画,但是并不是我今天想说的动画。 上图是横向移除的动画,而...

  • vue03

    vue03 vue过渡 自带 动画:.fade-transition{transition: 1s all ea...

  • 前端系统学习 10. Vue高级用法

    Vue 高级用法 动画特效 transition 实现路由切换动画 App.vue Home -> List ->...

  • Vue之transition

    Vue的transition实现动画效果 Vue 提供了 transition 的封装组件,可以给任何元素和组件添...

  • Vue动画

    Vue动画 Vue动画 CSS transition 在进入/离开的过渡中,会有 6 个 class 切换。 对于...

  • vue的动画特效

    一、Vue中的CSS动画原理transition标签 二、Vue中的JS动画与velocity.js 三、Vue中...

  • Vue动画

    vue动画 1. vue不能直接实现动画,只提供动画各阶段需要的class 2. 组件提供...

  • vue中的动画

    vue中的动画主要依靠transition这个控件,关于transition这个api可以上官网查看vue中的tr...

  • vue中的三种动画引用方法

    一.vue.transition vue-transition在过渡动画的不同时期通过切换不同class,给绑定元...

  • Vue中的动画

    基础CSS过渡和动画 动画:keyframes过渡:transition 列表动画 状态动画 组件和元素切换 1....

网友评论

      本文标题:常用的Vue列表transition动画

      本文链接:https://www.haomeiwen.com/subject/yxtmrktx.html