最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

技術(shù)棧: 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ù)切換方向設(shè)置不同的動畫效果(通過給transtion內(nèi)置組件不同的name選項)

方案

路由注冊

 {
   path: "/login",
   component: resolve => require(["@/pages/login"], resolve),
   meta: {
    title: "登錄",
    keepAlive: false, // 用來判斷是否緩存, 當(dāng)判斷為緩存時, 則路由信息的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的值應(yīng)該和匹配組件的name選項一致
    this.cachedViews.push(to.name);
   }
   //如果to索引大于from索引,判斷為前進狀態(tài),反之則為后退狀態(tài)
   if (to.meta.index > from.meta.index) {
    //設(shè)置動畫名稱
    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;
 <!-- 
  這個是必須的, 是為了讓頁面脫離文檔流, 不然的話, 后進入的頁面會從頁面底部出來
  這個定位會直接添加到路由匹配的組件根元素上, 所以頁面根組件最好設(shè)定其寬度為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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue關(guān)于對象直接賦值的坑及解決

    Vue關(guān)于對象直接賦值的坑及解決

    這篇文章主要介紹了Vue關(guān)于對象直接賦值的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vuex + axios 做登錄驗證 并且保存登錄狀態(tài)的實例

    vuex + axios 做登錄驗證 并且保存登錄狀態(tài)的實例

    今天小編就為大家分享一篇vuex + axios 做登錄驗證 并且保存登錄狀態(tài)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vuex實現(xiàn)數(shù)據(jù)增加和刪除功能

    Vuex實現(xiàn)數(shù)據(jù)增加和刪除功能

    今天小編就為大家分享一篇Vuex實現(xiàn)數(shù)據(jù)增加和刪除功能,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 前端vue中實現(xiàn)嵌入代碼編輯器的詳細(xì)代碼

    前端vue中實現(xiàn)嵌入代碼編輯器的詳細(xì)代碼

    隨著Web技術(shù)的不斷發(fā)展,前端開發(fā)也正日新月異,下面這篇文章主要給大家介紹了關(guān)于前端vue中實現(xiàn)嵌入代碼編輯器的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • 基于vue3實現(xiàn)一個抽獎小項目

    基于vue3實現(xiàn)一個抽獎小項目

    在公司年會期間我做了個抽獎小項目,非常棒,今天把他分享到腳本之家平臺,供大家學(xué)習(xí)參考,對vue3實現(xiàn)抽獎小項目感興趣的朋友一起看看吧
    2023-01-01
  • Vuex Store 數(shù)據(jù)在頁面刷新后丟失的解決方法

    Vuex Store 數(shù)據(jù)在頁面刷新后丟失的解決方法

    當(dāng)我們使用 Vue.js 和 Vuex 進行狀態(tài)管理時,一個常見的問題是頁面刷新會導(dǎo)致 Vuex store 中的數(shù)據(jù)丟失,本文將詳細(xì)介紹解決 Vuex Store 數(shù)據(jù)在頁面刷新后丟失的方法,感興趣的朋友一起看看吧
    2024-08-08
  • vue的Virtual Dom實現(xiàn)snabbdom解密

    vue的Virtual Dom實現(xiàn)snabbdom解密

    這篇文章主要介紹了vue的Virtual Dom實現(xiàn)- snabbdom解密,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 利用Vue實現(xiàn)一個markdown編輯器實例代碼

    利用Vue實現(xiàn)一個markdown編輯器實例代碼

    這篇文章主要給大家介紹了關(guān)于如何利用Vue實現(xiàn)一個markdown編輯器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • vue過濾器filter的使用方法詳解

    vue過濾器filter的使用方法詳解

    這篇文章主要給大家介紹了關(guān)于vue過濾器filter的使用方法,Vue.js的過濾器(Filter)是一種可重用的功能,用于對文本進行格式化,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • Vue.js對象轉(zhuǎn)換實例

    Vue.js對象轉(zhuǎn)換實例

    這篇文章主要介紹了 Vue.js對象轉(zhuǎn)換的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-06-06

最新評論

临潭县| 张家口市| 苏尼特左旗| 界首市| 云林县| 高密市| 武山县| 河南省| 观塘区| 调兵山市| 乐陵市| 平安县| 右玉县| 普洱| 玛多县| 司法| 寿宁县| 慈利县| 大邑县| 屯留县| 鄂尔多斯市| 托克托县| 莎车县| 靖州| 宜川县| 永福县| 神农架林区| 邵阳县| 咸丰县| 阜南县| 马边| 济源市| 潼南县| 右玉县| 丰都县| 临海市| 军事| 商丘市| 新乐市| 渑池县| 建昌县|