如何在 vue.js 中以一个页面作为过渡在页面之间进行过渡?

How to transition between pages in vue.js with a page as transition?

我只想知道如何在 vue.js 中的页面与第三页之间进行转换。

喜欢主页到关于页面,在过渡的中间我放了一个带有品牌标志的页面。

就像他们在这里做的那样:https://www.details.co.jp

谢谢。

从技术上讲,这是一个加载屏幕。您可以通过几种方式做到这一点。首先要做的是使用您的品牌徽标和动画创建加载组件。在根组件中导入它,并根据您创建的加载变量在模板中使用 v-show。如果您正在对 back-end 进行 API 调用,那么您可以使用您在根组件中使用的任何 http 客户端库创建一个拦截器。将拦截器放在创建的生命周期方法中,当它拦截请求时,会设置加载变量。当它拦截响应时,加载变量未设置。如果 API 调用很快或者您没有进行任何 API 调用,那么在创建的生命周期方法中,使用 afterEach 路由器调用和取消加载的 javascript 超时函数在设定的毫秒数后可变。

使用 axios 的示例:

 <template>
  <div class="main-container">
    <div class="loader"> <!-- set high z-index for overlay -->
      <Loading v-show="loading" />
    </div>
    <router-view />
  </div>
</template>

<script>
import Loading from "@/components/loading";
import axios from "axios";

export default {
  data() {
    return {
      // loading variable - default false so timeout unsets it
      loading: false,
    };
  },
  components: {
    // loading component with logo
    Loading,
  },
  created: function() {
    // router call to set minimum loading time
    this.$router.afterEach(() => {
      setTimeout(() => (this.loading = false), 400);
    });
    // when requests are made from this or any child component, set loading
    axios.interceptors.request.use((config) => {
      this.loading = true;
      return config;
    });
    // once a response is received, unset loading
    axios.interceptors.response.use((config) => {
      this.loading = false;
      return config;
    });
  }
};
</script>

我发现另一种方法更简单。

我刚刚做了一个组件,它的屏幕高度和宽度固定在一个固定的位置,等待一段时间后我将其关闭

像这样:

在 App.vue 中:(获得到页面过渡的漂亮淡入淡出过渡)

    <template>
      <div id="app">
        <transition name="fade" mode="out-in">
          <router-view />
        </transition>
      </div>
    </template>


<style lang="css">
    .fade-enter, .fade-leave-to{
    transition: translateX(3em);
        opacity: 0;
      }
      .fade-enter-active, .fade-leave-active{
        transition: all .3s ease;
      }
</style>

在Home.vue中:

<template>
  <div class="home">
    <Transition :name="'- Brand Name -'" v-if="display"/>
    <div>
       home things
    </div>
  </div>
</template>

<script>
import Transition from "@/components/Transition.vue";
export default {
  name: "About",
  components: {
    Transition
  },
data() {
    return {
      display: true,
    
    };
  },
mounted(){
        setTimeout(() => {
       this.display= false
      }, 3500);
    }
};
</script>