Vue transition实现滑动过渡效果及定位方案解析

作者:组件花园

时间:2026-10-22

浏览:107

本文介绍利用Vue的transition组件实现滑动过渡效果。重点解析为何在存在渐变消失过程时,使用absolute定位配合left值控制位置比transform更合适,以避免后续元素位置错乱。同时提及通过mode属性设置out-in模式可解决先后动画问题,确保元素正确运动。

文章目录

Vue滑动过渡效果实现方案

利用Vue框架处理轻量级动画效果十分便捷。本文旨在分享如何使用Vue的transition组件来实现一个滑动过渡的动画效果。

以下是具体的代码实现:


<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Vue滑动效果</title>
  <style>
    .d {
      position: absolute;
      border: 1px solid red;
      width: 30px;
      height: 30px;
    }
    @keyframes show {
      0% {
        opacity: 0;
        left: 32px;
      }
      100% {
        opacity: 1;
        left: 0;
      }
    }
    @keyframes hide {
      0% {
        opacity: 1;
        left: 0;
      }
      100% {
        opacity: 0;
        left: -32px;
      }
    }
    .show-enter-active {
      animation: show 1.2s;
    }
    .show-leave-active {
      animation: hide 1.2s;
    }
    .show-enter, .show-leave-to {
      opacity: 0;
    }
    .wrap {
      position: relative;
      width: 32px;
      height: 32px;
    }
  </style>
  <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="app">
  <p>{{ message }}</p>
  <div class="wrap">
    <transition name="show">
      <div class="d" v-for="item in list" :key="item.id" v-if="count === item.id">
        {{ item.text }}
      </div>
    </transition>
  </div>
  <button @click="add">add</button>
</div>

<script>
  new Vue({
    el: '#app',
    data () {
      return {
        message: 'Hello Vue.js!',
        count: 0,
        list: [
          {id: 0, text: 'aaa'},
          {id: 1, text: 'bbb'},
          {id: 2, text: 'ccc'}
        ]
      }
    },
    methods: {
      add: function () {
        if (this.count < this.list.length - 1) {
          this.count += 1;
        } else {
          this.count = 0;
        }
      }
    }
  })
</script>
</body>
</html>

在实现过程中,需注意父容器应设置为relative定位,而子元素则采用absolute定位。通过控制left属性值来调整元素的位置移动。如果在此场景下使用transform,由于前一个div在渐变消失过程中仍占据文档流位置,会导致后续div无法准确移动到预定位置,因此采用absolute定位是更优的选择。

若上述方案仍无法满足需求,可尝试使用transition组件的mode属性,将其设置为out-in。该模式会先执行前一个元素的动画,待其占据的空间完全消失后,再启动下一个div的运动。需要注意的是,这种方式仅支持动画依次执行,无法实现同时进行的动画效果。

以上内容为本文的全部分享,希望能为读者的学习提供有益参考。欢迎继续支持本站获取更多技术内容。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章