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

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

 更新時(shí)間:2019年11月12日 11:21:20   作者:歲月靜好_不負(fù)此生  
這篇文章主要介紹了vue頁(yè)面切換項(xiàng)目實(shí)現(xiàn)轉(zhuǎn)場(chǎng)動(dòng)畫(huà)的方法,文中通過(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)畫(huà)

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

解決思路

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

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

監(jiān)聽(tīng)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)畫(huà)效果(通過(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)畫(huà)還是后退動(dòng)畫(huà)
   }
  },
  {
   path: "/forward",
   name: "Forward",
   component: resolve => require(["@/pages/forward"], resolve),
   meta: {
    title: "前進(jìn)",
    keepAlive: true,
    index: 2
   }
  },

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

<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)畫(huà)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)畫(huà)方向
   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)畫(huà)名稱
    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)題

子路由還沒(méi)有考慮到

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

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

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

相關(guān)文章

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

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

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

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

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

    vue實(shí)現(xiàn)新聞?wù)故卷?yè)的步驟詳解

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

    vite.config.ts配置之自動(dòng)導(dǎo)入element-puls方式

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

    vue中的傳值及賦值問(wèn)題

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

    利用vue開(kāi)發(fā)一個(gè)所謂的數(shù)獨(dú)方法實(shí)例

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

    vux-scroller實(shí)現(xiàn)移動(dòng)端上拉加載功能過(guò)程解析

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

    Vue項(xiàng)目啟動(dòng)報(bào)錯(cuò)解決方法大全

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

    Vue 過(guò)渡實(shí)現(xiàn)輪播圖效果

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

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

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

最新評(píng)論