vue移动端实现手机左右滑动入场动画

app.vue

<template>
  <div id="app">
    <transition :name="transitonname">
      <router-view class="Router" />
    </transition>
  </div>
</template>

<style lang="less">
#app {
  min-height: 100%;
  background-color: #efefef;
}
html,
body {
  height: 100%;
}
body {
  font-size: 0.14rem;
}
html {
  font-size: 100px;
}

.Router {
  width: 100%;
  height: 100%;
}

// 事件动画
.slide-right-enter-active,
.slide-right-leave-active,
.slide-left-enter-active,
.slide-left-leave-active {
  will-change: transform;
  transition: all 500ms;
  position: absolute;
}

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

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

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

.slide-left-leave-active {
  opacity: 0;
  transform: translateX(-100%);
}
</style>

<script>
export default {
  data() {
    return {
      transitonname: "slide-left",
    };
  },
  watch: {
    // to from 代表 前进的路由和后退的路由
    $route(to, from) {
      // 假如是返回,则执行slide-right
      // console.log(to, from);
      if (this.$router.isBack == true) {
        // 加载返回动画
        this.transitonname = "slide-right";
        // 重置为不返回
        this.$router.isBack = false;
      } else {
        this.transitonname = "slide-left";
      }
    },
  },
};
</script>

返回事件

back () {
 this.$router.go(-1)
 this.$router.isBack = true
}