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

vue頁(yè)面切換項(xiàng)目實(shí)現(xiàn)轉(zhuǎn)場(chǎng)動(dòng)畫的方法

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

前言

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

實(shí)現(xiàn)原理, vue的過(guò)渡 & 動(dòng)畫

技術(shù)棧: vue + vue-router

解決思路

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

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

監(jiān)聽popstate事件

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

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

{
   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: "前進(jìn)",
    keepAlive: true,
    index: 2
   }
  },

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

方案

路由注冊(cè)

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

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

<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: 因?yàn)槿羰鞘褂胻ransition包裹兩個(gè)keep-alive, vue會(huì)出現(xiàn)報(bào)錯(cuò)
        用兩個(gè)transition分別包裹keep-alive, 會(huì)讓transition的動(dòng)畫name出現(xiàn)問(wè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", // 初始過(guò)渡動(dòng)畫方向
   cachedViews: [] // 緩存組件
  };
 },
 components: {},
 created() {},
 watch: {
  $route(to, from) {
   if (to.meta.keepAlive && !this.cachedViews.includes(to.name)) {
    // 將需要緩存的組件信息, 添加進(jìn)其中, 其中to.name的值應(yīng)該和匹配組件的name選項(xiàng)一致
    this.cachedViews.push(to.name);
   }
   //如果to索引大于from索引,判斷為前進(jìn)狀態(tài),反之則為后退狀態(tài)
   if (to.meta.index > from.meta.index) {
    //設(shè)置動(dòng)畫名稱
    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;
 <!-- 
  這個(gè)是必須的, 是為了讓頁(yè)面脫離文檔流, 不然的話, 后進(jìn)入的頁(yè)面會(huì)從頁(yè)面底部出來(lái)
  這個(gè)定位會(huì)直接添加到路由匹配的組件根元素上, 所以頁(yè)面根組件最好設(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>

待解決問(wèn)題

  • 子路由問(wèn)題

子路由還沒有考慮到

  • 緩存組件問(wèn)題

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

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

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

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

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

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

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

    基于vue3實(shí)現(xiàn)一個(gè)抽獎(jiǎng)小項(xiàng)目

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

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

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

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

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

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

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

    vue過(guò)濾器filter的使用方法詳解

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

    Vue.js對(duì)象轉(zhuǎn)換實(shí)例

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

最新評(píng)論

山东省| 额尔古纳市| 乐东| 托克托县| 曲麻莱县| 舞钢市| 清水县| 宁远县| 崇州市| 新河县| 西峡县| 英吉沙县| 洪洞县| 包头市| 滨州市| 珠海市| 博白县| 诸城市| 普陀区| 新源县| 南岸区| 灵台县| 安福县| 乌兰察布市| 原阳县| 临海市| 子长县| 韶关市| 宜兰县| 西峡县| 澎湖县| 涡阳县| 灵台县| 福建省| 浦县| 广南县| 福鼎市| 改则县| 郎溪县| 江陵县| 道孚县|