Vue实现table左右切换平滑过渡效果

页面结构

javascript 复制代码
<div>
      <span @click="checkBtn = '1'">1111</span> |
      <span @click="checkBtn = '2'">2222</span>
    </div>

    <div >
      <transition :name="transitionName" appear>
        <ContractTrade v-if="checkBtn === '1'" key="1" @traded="$emit('traded')" />
        <ContractTrade v-else key="2" @traded="$emit('traded')" />
      </transition>
    </div>

实现

javascript 复制代码
const checkBtn = ref('1');
    const transitionName = computed(() => {
      if (checkBtn.value == '1') {
        return 'slide-left';
      } else {
        return 'slide-right';
      }
    });
html 复制代码
.contract-trade-wrap {
  position: relative;
  overflow: hidden;
}

// .slide-right-enter-active,
// .slide-right-leave-active,
// .slide-left-enter-active,
// .slide-left-leave-active {
//   transition: all 0.2s linear;
// }

// .slide-right-enter {
//   transform: translateX(100%);
//   opacity: 1;
// }

// .slide-right-leave-to {
//   transform: translateX(-100%);
//   opacity: 0;
// }

// .slide-left-enter {
//   transform: translateX(-100%);
//   opacity: 0;
// }

// .slide-left-leave-to {
//   transform: translateX(100%);
//   opacity: 1;
// }

// ======
// .slide-right-enter {
//   transform: rotateY(-90deg);
//   transform-origin: top right;
// }
// .slide-right-leave-to {
//   transform: rotateY(90deg);
//   transform-origin: top right;
// }

// .slide-left-enter {
//   transform: rotateY(-90deg);
//   transform-origin: top left;
// }
// .slide-left-leave-to {
//   transform: rotateY(90deg);
//   transform-origin: top left;
// }

// .slide-enter-active,
// .slide-leave-active {
//   transition: opacity 0.5s;
// }

// .slide-enter,
// .slide-leave-to {
//   opacity: 0;
// }

// ====
// .slide-right-enter-active,
// .slide-left-leave-active {
//   animation: fade 0.6s;
// }

// .slide-right-enter,
// .slide-left-leave-to {
//   transform: translateX(100%);
//   opacity: 0;
// }

// @keyframes fade {
//   from {
//     transform: translateX(100%);
//     opacity: 0;
//   }
//   to {
//     transform: translateX(0);
//     opacity: 1;
//   }
// }

.nested-enter-active,
.nested-leave-active {
  transition: all 0.3s ease-in-out;
}
.nested-leave-active {
  transition-delay: 0.25s;
}

.nested-enter-from,
.nested-leave-to {
  transform: translateY(30px);
  opacity: 0;
}

.nested-enter-active,
.nested-leave-active {
  transition: all 0.3s ease-in-out;
}
.nested-enter-active {
  transition-delay: 0.25s;
}

.nested-enter-from,
.nested-leave-to {
  transform: translateX(30px);
  opacity: 0.001;
}

参考

Transition | Vue.js (vuejs.org)

相关推荐
把csdn当日记本的菜鸡几秒前
js查缺补漏
开发语言·javascript·ecmascript
BBB努力学习程序设计15 分钟前
了解响应式Web设计:viewport网页可视区域
前端·html
zhangyao94033017 分钟前
uni-app scroll-view特定情况下运用
前端·javascript·uni-app
码农张18 分钟前
从原理到实践,吃透 Lit 响应式系统的核心逻辑
前端
jump68019 分钟前
object和map 和 WeakMap 的区别
前端
打小就很皮...24 分钟前
基于 Dify 实现 AI 流式对话:组件设计思路(React)
前端·react.js·dify·流式对话
这个昵称也不能用吗?32 分钟前
【安卓 - 小组件 - app进程与桌面进程】
前端
kuilaurence36 分钟前
CSS `border-image` 给文字加可拉伸边框
前端·css
一 乐39 分钟前
校园墙|校园社区|基于Java+vue的校园墙小程序系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·小程序
一只小阿乐44 分钟前
前端react 开发 图书列表分页
前端·react.js·react·ant-