【问题标题】:Page slide transition in Vue?Vue中的页面幻灯片转换?
【发布时间】:2020-04-08 04:34:20
【问题描述】:

我正在使用 Vue.js 构建一个应用程序,我想给它更多类似于原生的视图。如何添加页面幻灯片过渡?

我当前的代码:

<transition name="fade" mode="out-in">
  <router-view></router-view>
</transition>
...
.fade-enter-active, .fade-leave-active {
  transition: opacity .2s;
}

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

我希望它看起来像:

Click here


使用@Ifaruki 的代码:

Click here

【问题讨论】:

    标签: vue.js


    【解决方案1】:

    在您展示的示例中,有两个转换:前进,后退。因此,您必须找到一种方法来根据您单击的链接更改转换。您可以为此使用 vuex 商店。

    一旦 vuex 安装和配置,您可以执行以下操作:

    检查代码框中的实时示例:https://codesandbox.io/s/vuejs-transition-slide-in-out-yzc05

    SCSS : 为你的过渡设置样式(App.vue 中的 P.ex)

    
    $duration: 0.5s;
    .transition {
      overflow: hidden;
    }
    .router-view,
    .router-view-back {
      &-enter-active,
      &-leave-active {
        position: fixed;
        width: 100%;
        background: white;
        min-height: 100vh;
        top: 0;
      }
    }
    // router view
    .router-view-enter-active {
      transition: transform $duration ease-in-out;
      z-index: 2;
      transform: translateX(100%);
    }
    .router-view-enter-to {
      z-index: 2;
      transform: translateX(0%);
    }
    .router-view-leave-active {
      z-index: -1;
    }
    .router-view-leave-to {
      z-index: -1;
    }
    // router view back
    
    .router-view-back-leave-active {
      transition: transform $duration ease-in-out;
      z-index: 2;
      transform: translateX(0%);
    }
    .router-view-back-leave-to {
      z-index: 2;
      transform: translateX(100%);
    }
    

    App.vue 的模板

    <template>
      <div id="app">
        <transition
          :name="$store.state.pageTransition.name"
          :mode="$store.state.pageTransition.mode"
          v-on:after-enter="afterEnter"
          v-on:after-leave="afterLeave"
        >
          <router-view class="transition"/>
        </transition>
      </div>
    </template>
    

    App.vue 的方法

    methods: {
        afterEnter: () => {
          window.scrollTo(0, 0);
        },
        afterLeave: () => {
          Store.commit("setPageTransition", "default");
        }
      }
    

    链接上一个(更改过渡)

    模板

     <button @click="goBack()">Previous page</button>
    

    方法

    goBack() {
          this.$store.commit("setPageTransition", "back");
          this.$router.push({
            name: "home"
          });
    }
    

    【讨论】:

      【解决方案2】:

      在进行页面转换之前,您应该了解 Vue.js 路由器。

      https://router.vuejs.org/guide/advanced/transitions.html#per-route-transition

      编辑:幻灯片效果应该是这样的:

       transition name="slide" mode="out-in">
         <router-view></router-view>
       </transition>
       ...
       .slide-enter-active, .slide-leave-active {
         transition: 300ms;
      
        }
       .slide-enter-to{
          position: relative;
          left: 0;
       }
       .slide-leave{
          position: absolute;
         }
       .slide-enter,  {
          left: -100vw;
          position: absolute;
        }
       .slide-leave-to {
          right: -100vw;
       }
      

      【讨论】:

      • 实际上,我已经这样做了,但看起来不像那样 - 我已经按照他们的过渡文档获得了 fade 效果。
      猜你喜欢
      • 2018-02-19
      • 2019-05-21
      • 1970-01-01
      • 2012-12-28
      • 2018-10-18
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      • 2019-06-20
      相关资源
      最近更新 更多