首頁 web前端 js教程 vue行動端路由切換案例解析

vue行動端路由切換案例解析

May 21, 2018 pm 03:20 PM
切換 案例 解析

這次帶給大家vue行動端路由切換案例解析,vue行動端路由切換的注意事項有哪些,以下就是實戰案例,一起來看一下。

其中最主要的時以下兩個問題:

瀏覽器導覽列的切換

IOS 上滑動切換時,會有兩次頁面的轉場動畫,一次自身滑動時進行的切換,隨後觸發我們設定的轉場動畫。

除了上面兩個問題,其餘的操作都是可以在頁面內進行設置,基本上都是可控的。主要就是解決上面兩個問題。

可以看下實際寫出來的效果:線上DEMO

1. 瀏覽器導覽列的切換

##透過記錄歷史記錄來比較判斷前進或後退

如下範例


A頁面-> B頁面-> C頁面


假如我從A頁面到B頁面再到C頁面,歷史記錄就會產生3條

我們用一個陣列表示: ['/a', '/b', '/c']

然後我在透過點擊瀏覽器導覽列的後退按鈕, 我便會回到B 頁面,

這時候我只要判斷是否存在B頁面, 存在就證明我點的時後退按鈕。

然後只要我退過, 我就能點擊瀏覽器的前進按鈕了。這時候怎麼判斷它到底是前進的呢。

我們可以這樣。

當我們後退到了B頁面,歷史記錄不是還保存著['/a', '/b', '/c'] 三個路徑嗎

我們可以刪除B頁面後面的路徑,那現在就是['/a', '/b'];

如果我們後退到A頁面, 那麼我們保存的路徑就是['/a']

#只要我們點擊前進按鈕, 我們去保存的路徑裡面找, 是不是就找不到路徑了, 那樣就完成了前進判斷。

上面是正常的情況。

但是假如我們有點頁面重複進入了呢。

就如以下這種情況

A頁面-> B頁面-> C頁面-> B頁面-> C頁面

現在走了5步,到達了第二個C頁面, 然後我們後退一步,到達了B頁面


這個時候問題就出來了,我們是刪除第一個B頁面後面的路徑還是刪除第二個B頁面後面的路徑

我們先試著刪除第二個B頁面的路徑,那麼我們還保存的路徑就是: ['/a', '/b', '/c', '/b']。


1、那這個時候我們按照上面正常情況的邏輯來操作.


#我點擊前進, 然後我去保存的路徑裡面找,找不到就算前進, 找到證明是後退。


那麼結果顯而易見,我們找到了第一個C頁面,那就這樣就算後退了,但其實我點擊的時前進


2、那我們試著刪除第一個B頁面後面的路徑,那麼儲存的路徑就是: ['/a', '/b'],


那麼我在點擊後退按鈕,這時候他其實會進入C頁面, 我們可以看以下流程圖

這時候我們在此點擊後退按鈕,就會到C頁面, 但是保存的路徑裡面`'/c' ` 已經被我刪除了, 所以判斷出來的是前進。

1、如果我們過濾重複的頁面路徑,是不是就會好了呢,其實也是一樣的


假如我們有5個頁面路徑,過濾了2個重複的,只有3個頁面路徑了


那麼我退到第四個路徑的時候是不是就找不到了, 那麼後面兩個頁面都會算是前進。


所以以目前來看,最好的辦法就是記錄每一個頁面,但是每個頁面,都讓他有區別


那麼我們就可以在url上面放一個隨機

字串

程式碼實作:


// 当没有key的时候会进入两次 beforeEach,我们只需保存带key的就行
const updateNavigations = (to) => {
 if (to.query[pathKey]) {
  store.commit('UPDATE_NAVIGATIONS', {path: to.fullPath})
 }
}

router.beforeEach((to, from, next) => {
 let toIndex = store.state.navigations.findIndex(path => path === to.fullPath)
 if (toIndex >= 0) { // 存在该路径
  let len = store.state.navigations.length-1
  if (toIndex === len) { // 当前路径是最后一条,证明是同一个页面
   console.log('refresh') 
  } else { // 后退
   store.commit('UPDATE_ROUTER_DIRECTION', { routerDirection: 'back' }) // 后退标志
   store.commit('DELETE_NAVIGATION', { index: toIndex }) // 删除当前路径后面的路径
  }
 }else{ // 不存在该路径
  store.commit('UPDATE_ROUTER_DIRECTION', { routerDirection: 'forward' }) // 前进标志
  updateNavigations(to) // 保存该连接
 }

 const query = { ...to.query }
 // 存在就直接next, 防止死循环
 if (!query['APP_KEY']) { // 不存在添加key ,再次 next
  query['APP_KEY'] = Math.random().toString(16).substring(2)
  next({ path: to.path, query})
 }else{
  next()
 }
})
登入後複製


##以上程式碼我們就能就url中加入一個APP_KEY 的隨機串,那樣就算同一個頁面在我們保存的路徑裡面也是其實是不同的。就可以正常的執行邏輯了


上面就基本解決了瀏覽器導航列的問題了

2. IOS上的滑動切換


在IOS的網頁上, 是可以左右滑動進行切換,即使你沒有做轉場動畫。


這個時候就會出現一個問題。

還是ABC頁面

A -> B -> C

當我們到達C頁面,然後向左滑動時,滑完他就進入B頁面,但這這時它還是會進入我們的beforeEach 這個鉤子函數裡面,執行我們上面的邏輯。


那樣就會觸發我們的轉場動畫。你會發現執行了兩次切換。

於是我在網路上找到了一個方法fix io​​s左滑再次執行動畫#2259

程式碼是這樣的

let touchEndTime = Date.now()

window.addEventListener('touchend', () => {
 touchEndTime = Date.now()
})

router.beforeEach((to, from, next) => {
 if ((Date.now() - touchEndTime) < 377) { // ios滑动切换
  store.commit(&#39;UPDATE_ROUTER_DIRECTION&#39;, { routerDirection: &#39;&#39; })
 }
})
登入後複製

上面也很好理解, 就是我們取到手指最後離開的屏幕的那一刻, 然後在到beforeEach裡面進行比較,
當手指離開屏幕的最後一刻跟我們自己beforeEach裡面進行的轉場相差小於337, 就算是IOS的滑動切換

那樣就解決了IOS的滑動切換問題了。

但是IOS的右滑切換時監聽不到手指離開螢幕的那一刻的(也不知道是什麼鬼), 所以IOS的右滑切換,是沒法像上面那樣判斷的。

這個我也沒找到解決方法, 暫時只能解決IOS左滑回傳的切換。

基本上遇到的比較麻煩的兩個點就是上面這兩個點了,其餘都是可以透過監聽事件進行設置,倒也沒什麼難度

線上DEMO示範

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦讀取:

jQuery類別名稱選擇器(.class)使用方法詳解

vue動態綁定元件子父元件多表單驗證實作步驟詳解

以上是vue行動端路由切換案例解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Oracle錯誤3114詳解:如何快速解決 Oracle錯誤3114詳解:如何快速解決 Mar 08, 2024 pm 02:42 PM

Oracle錯誤3114詳解:如何快速解決,需要具體程式碼範例在Oracle資料庫開發與管理過程中,我們常常會遇到各種各樣的錯誤,其中錯誤3114是比較常見的一個問題。錯誤3114通常表示資料庫連線出現問題,可能是網路故障、資料庫服務停止、或連接字串設定不正確等原因導致的。本文將詳細解釋錯誤3114的產生原因,以及如何快速解決這個問題,並附上具體的程式碼

win11家庭版切換專業版操作教學_win11家庭版切換專業版操作教學 win11家庭版切換專業版操作教學_win11家庭版切換專業版操作教學 Mar 20, 2024 pm 01:58 PM

Win11家庭版怎麼轉換成Win11專業版?在Win11系統中,分為了家庭版、專業版、企業版等,而大部分Win11筆電都是預先安裝Win11家用版系統。而今天小編就帶給大家win11家庭版切換專業版操作步驟!1、先在win11桌面此電腦上右鍵屬性。 2、點選更改產品金鑰或升級windows。 3、然後進入後點選更改產品金鑰。 4.再輸入啟動金鑰:8G7XN-V7YWC-W8RPC-V73KB-YWRDB,選擇下一步。 5.接著就會提示成功,這樣就可以將win11家用版升級win11專業版了。

小米14Ultra如何切換4g和5g? 小米14Ultra如何切換4g和5g? Feb 23, 2024 am 11:49 AM

小米14Ultra是今年小米中非常火熱的機型之一,小米14Ultra不僅升級了處理器以及各種配置,而且還為用戶們帶來了很多新的功能應用,從小米14Ultra銷售就可以看出來手機的火爆程度,不過有一些常用的功能可能你還沒了解。那麼小米14Ultra如何切換4g和5g呢?下面小編就來為大家介紹一下具體的內容吧!小米14Ultra怎麼換4g和5g? 1.打開手機的設定選單。 2、設定選單中尋找並選擇「網路」、「行動網路」的選項。 3.在行動網路設定中,會看到「首選網路類型」選項。 4、點選或選擇該選項,會看到

切換蘋果電腦雙系統啟動方式 切換蘋果電腦雙系統啟動方式 Feb 19, 2024 pm 06:50 PM

蘋果雙系統開機怎麼切換蘋果電腦作為一款功能強大的設備,除了搭載自家的macOS作業系統外,也可以選擇安裝其他作業系統,例如Windows,從而實現雙系統的切換。那麼在開機時,我們要如何切換這兩個系統呢?本文就來為大家介紹一下在蘋果電腦上如何實現雙系統的切換。首先,在安裝雙系統之前,我們需要確認自己的蘋果電腦是否支援雙系統切換。一般來說,蘋果電腦都是基於

解析Wormhole NTT:適用於任何Token的開放框架 解析Wormhole NTT:適用於任何Token的開放框架 Mar 05, 2024 pm 12:46 PM

Wormhole在區塊鏈互通性方面處於領先地位,專注於創建有彈性、面向未來的去中心化系統,優先考慮所有權、控制權和無需許可的創新。這個願景的基礎是對技術專業知識、道德原則和社群一致性的承諾,旨在以簡單、清晰和廣泛的多鏈解決方案套件重新定義互通性格局。隨著零知識證明、擴容方案和功能豐富的Token標準的興起,區塊鏈變得更加強大,而互通性也變得越來越重要。在這個不斷創新的應用程式環境中,新穎的治理系統和實用功能為整個網路的資產帶來了前所未有的機會。協議建構者現在正在努力思考如何在這個新興的多鏈

excel切換工作簿快速鍵的使用方法 excel切換工作簿快速鍵的使用方法 Mar 20, 2024 pm 01:50 PM

在excel軟體的應用程式裡,我們已經習慣使用快捷鍵,讓有些操作變得更簡單和快捷,excel的多個表格之間有時候會有相關的數據,我們在查看時,要不停的切換工作簿,如果有更快捷的切換方法,就會省下很多切換浪費的時間,對工作效率的提高有很大的幫助,什麼辦法可以完成快速的切換呢,針對這個問題,小編今天要講的內容是:excel切換工作簿快速鍵的使用方法。 1.首先在開啟的excel表格的下方可以看到有多個工作簿,需要快速切換不同的工作簿,如下圖所示。  2、然後按下鍵盤上的Ctrl鍵不動,如果需要向右選擇工作

PHP 中點的意思和用法解析 PHP 中點的意思和用法解析 Mar 27, 2024 pm 08:57 PM

【PHP中點的意義和用法解析】在PHP中,中點(.)是常用的運算符,用來連接兩個字串或物件的屬性或方法。在本文中,我們將深入探討PHP中點的意義和用法,並透過具體的程式碼範例加以說明。 1.連接字串中點運算子.在PHP中最常見的用法是連接兩個字串。透過將.放置在兩個字串之間,可以將它們拼接在一起,形成一個新的字串。 $string1=&qu

認識全角與半角:切換技巧一覽 認識全角與半角:切換技巧一覽 Mar 25, 2024 pm 01:36 PM

在日常生活中,我們經常會遇到全角和半角的問題,但可能很少有人深入了解它們的意義和差異。全角和半角,其實是一種字元編碼方式的概念,而在電腦輸入、編輯、排版等方面都有其特殊的應用。本文將深入探討全角和半角的差異、切換技巧以及在實際生活中的應用。首先,全角和半角在漢字文字領域中的定義是:一個全角字元佔用一個字元位置,而一個半角字元佔用半個字元位置。在計算機中,通

See all articles