欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue頁面切換項目實現(xiàn)轉(zhuǎn)場動畫的方法

 更新時間:2019年11月12日 11:21:20   作者:歲月靜好_不負此生  
這篇文章主要介紹了vue頁面切換項目實現(xiàn)轉(zhuǎn)場動畫的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

移動端, 使用vue為了良好的用戶體驗, 會需要實現(xiàn)APP形式的切換頁面的左滑和右滑效果

實現(xiàn)原理, vue的過渡 & 動畫

技術棧: vue + vue-router

解決思路

區(qū)分前進 和 后退的路由

網(wǎng)上搜索的資料, 找到了兩種

監(jiān)聽popstate事件

window.addEventListener('popstate', function (e) {
  // 用來判斷是否是后退, 在判斷后需要在其他地方重置
  router.isBack = true
},false)

在注冊路由的時, 添加 meta對象 ( 路由元信息)中添加索引, 這樣做就需要注意索引的大小(這里使用這一種方式)

{
   path: "/login",
   component: resolve => require(["@/pages/login"], resolve),
   meta: {
    title: "登錄",
    keepAlive: false,
    index: 1
   }
  },
  {
   path: "/forward",
   name: "Forward",
   component: resolve => require(["@/pages/forward"], resolve),
   meta: {
    title: "前進",
    keepAlive: true,
    index: 2
   }
  },

根據(jù)切換方向設置不同的動畫效果(通過給transtion內(nèi)置組件不同的name選項)

方案

路由注冊

 {
   path: "/login",
   component: resolve => require(["@/pages/login"], resolve),
   meta: {
    title: "登錄",
    keepAlive: false, // 用來判斷是否緩存, 當判斷為緩存時, 則路由信息的name和組件的name選項需一致
    index: 1, // 通過比較不同的索引, 來判斷是前進動畫還是后退動畫
   }
  },
  {
   path: "/forward",
   name: "Forward",
   component: resolve => require(["@/pages/forward"], resolve),
   meta: {
    title: "前進",
    keepAlive: true,
    index: 2
   }
  },

在App.vue(根組件)中, 判斷動畫方向

<template>
 <div id="project">
   <!-- 
   <keep-alive>
       <router-view v-if="$route.meta.keepAlive"></router-view>
   </keep-alive>
   <router-view v-if="!$route.meta.keepAlive"></router-view>
   這種情況下, 
   :include: 因為若是使用transition包裹兩個keep-alive, vue會出現(xiàn)報錯
        用兩個transition分別包裹keep-alive, 會讓transition的動畫name出現(xiàn)問題
 --> 
  <transition :name="transitionName">
   <keep-alive :include="cachedViews">
    <router-view :key="1"></router-view>
   </keep-alive>
  </transition>
 </div>
</template>

<script>
export default {
 name: "App",
 data() {
  return {
   transitionName: "slide-right", // 初始過渡動畫方向
   cachedViews: [] // 緩存組件
  };
 },
 components: {},
 created() {},
 watch: {
  $route(to, from) {
   if (to.meta.keepAlive && !this.cachedViews.includes(to.name)) {
    // 將需要緩存的組件信息, 添加進其中, 其中to.name的值應該和匹配組件的name選項一致
    this.cachedViews.push(to.name);
   }
   //如果to索引大于from索引,判斷為前進狀態(tài),反之則為后退狀態(tài)
   if (to.meta.index > from.meta.index) {
    //設置動畫名稱
    this.transitionName = "slide-left";
   } else {
    this.transitionName = "slide-right";
   }
  }
 },
 methods: {}
};
</script>


<style lang="scss" scoped>
.slide-right-enter-active,
.slide-right-leave-active,
.slide-left-enter-active,
.slide-left-leave-active {
 will-change: transform;
 transition: all 0.5s;
 <!-- 
  這個是必須的, 是為了讓頁面脫離文檔流, 不然的話, 后進入的頁面會從頁面底部出來
  這個定位會直接添加到路由匹配的組件根元素上, 所以頁面根組件最好設定其寬度為100vw
 -->
 width: 100vw;
 position: absolute;
}
.slide-right-enter {
 opacity: 0;
 transform: translate3d(-100%, 0, 0);
}
.slide-right-leave-active {
 opacity: 0;
 transform: translate3d(100%, 0, 0);
}
.slide-left-enter {
 opacity: 0;
 transform: translate3d(100%, 0, 0);
}
.slide-left-leave-active {
 opacity: 0;
 transform: translate3d(-100%, 0, 0);
}
</style>

待解決問題

  • 子路由問題

子路由還沒有考慮到

  • 緩存組件問題

使用上述方式, 緩存組件需要注意組件的name選項要和路由的name選項一致, 容易疏忽填寫組件的name選項問題

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Vue使用openlayers實現(xiàn)繪制圓形和多邊形

    Vue使用openlayers實現(xiàn)繪制圓形和多邊形

    這篇文章主要為大家詳細介紹了Vue如何使用openlayers實現(xiàn)繪制圓形和多邊形,文中的示例代碼講解詳細,感興趣的小伙伴快跟隨小編一起動手嘗試一下
    2022-06-06
  • 手把手帶你安裝vue-cli并創(chuàng)建第一個vue-cli應用程序

    手把手帶你安裝vue-cli并創(chuàng)建第一個vue-cli應用程序

    vue-cli這個構建工具大大降低了webpack的使用難度,支持熱更新,有webpack-dev-server的支持,相當于啟動了一個請求服務器,給你搭建了一個測試環(huán)境,下面這篇文章主要給大家介紹了關于安裝vue-cli并創(chuàng)建第一個vue-cli應用程序的相關資料,需要的朋友可以參考下
    2022-08-08
  • vue實現(xiàn)新聞展示頁的步驟詳解

    vue實現(xiàn)新聞展示頁的步驟詳解

    最近小編遇到這樣的需求,要實現(xiàn)一個新聞展示頁功能,剛接到這樣的需求還真是一頭霧水,不知從哪入手,今天小編通過實例代碼給大家介紹下vue實現(xiàn)新聞展示頁的步驟詳解,感興趣的朋友跟隨小編一起看看吧
    2019-04-04
  • vite.config.ts配置之自動導入element-puls方式

    vite.config.ts配置之自動導入element-puls方式

    這篇文章主要介紹了vite.config.ts配置之自動導入element-puls方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue中的傳值及賦值問題

    vue中的傳值及賦值問題

    這篇文章主要介紹了vue中的傳值及賦值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 利用vue開發(fā)一個所謂的數(shù)獨方法實例

    利用vue開發(fā)一個所謂的數(shù)獨方法實例

    數(shù)獨是源自18世紀瑞士的一種數(shù)學游戲,是一種運用紙、筆進行演算的邏輯游戲。下面這篇文章主要給大家介紹了關于利用vue開發(fā)一個所謂的數(shù)獨的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2017-12-12
  • vux-scroller實現(xiàn)移動端上拉加載功能過程解析

    vux-scroller實現(xiàn)移動端上拉加載功能過程解析

    這篇文章主要介紹了vux-scroller實現(xiàn)移動端上拉加載功能過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Vue項目啟動報錯解決方法大全

    Vue項目啟動報錯解決方法大全

    這篇文章主要給大家介紹了關于Vue項目啟動報錯解決方法的相關資料,文中通過圖文將解決的過程介紹的非常詳細,對大家學習或者使用vue具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Vue 過渡實現(xiàn)輪播圖效果

    Vue 過渡實現(xiàn)輪播圖效果

    本篇文章主要介紹了Vue 過渡實現(xiàn)輪播圖效果,Vue 的過渡系統(tǒng)是內(nèi)置的,在元素從 DOM 中插入或移除時自動應用過渡效果。有需要的小伙伴可以參考下。
    2017-03-03
  • vue實現(xiàn)登陸登出的實現(xiàn)示例

    vue實現(xiàn)登陸登出的實現(xiàn)示例

    本篇文章主要介紹了vue實現(xiàn)登陸登出的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論