這次帶給大家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頁面
// 当没有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 的隨機串,那樣就算同一個頁面在我們保存的路徑裡面也是其實是不同的。就可以正常的執行邏輯了
上面就基本解決了瀏覽器導航列的問題了
在IOS的網頁上, 是可以左右滑動進行切換,即使你沒有做轉場動畫。
這個時候就會出現一個問題。
還是ABC頁面
A -> B -> C當我們到達C頁面,然後向左滑動時,滑完他就進入B頁面,但這這時它還是會進入我們的beforeEach 這個鉤子函數裡面,執行我們上面的邏輯。
那樣就會觸發我們的轉場動畫。你會發現執行了兩次切換。
於是我在網路上找到了一個方法fix ios左滑再次執行動畫#2259
程式碼是這樣的
let touchEndTime = Date.now() window.addEventListener('touchend', () => { touchEndTime = Date.now() }) router.beforeEach((to, from, next) => { if ((Date.now() - touchEndTime) < 377) { // ios滑动切换 store.commit('UPDATE_ROUTER_DIRECTION', { routerDirection: '' }) } })
上面也很好理解, 就是我們取到手指最後離開的屏幕的那一刻, 然後在到beforeEach裡面進行比較,
當手指離開屏幕的最後一刻跟我們自己beforeEach裡面進行的轉場相差小於337, 就算是IOS的滑動切換
那樣就解決了IOS的滑動切換問題了。
但是IOS的右滑切換時監聽不到手指離開螢幕的那一刻的(也不知道是什麼鬼), 所以IOS的右滑切換,是沒法像上面那樣判斷的。
這個我也沒找到解決方法, 暫時只能解決IOS左滑回傳的切換。
基本上遇到的比較麻煩的兩個點就是上面這兩個點了,其餘都是可以透過監聽事件進行設置,倒也沒什麼難度
線上DEMO示範
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦讀取:
以上是vue行動端路由切換案例解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python解析XML中的特殊字符和转义序列XML(eXtensibleMarkupLanguage)是一种常用的数据交换格式,用于在不同系统之间传输和存储数据。在处理XML文件时,经常会遇到包含特殊字符和转义序列的情况,这可能会导致解析错误或者误解数据。因此,在使用Python解析XML文件时,我们需要了解如何处理这些特殊字符和转义序列。一、特殊字符和

Python编程解析百度地图API文档中的坐标转换功能导读:随着互联网的快速发展,地图定位功能已经成为现代人生活中不可或缺的一部分。而百度地图作为国内最受欢迎的地图服务之一,提供了一系列的API供开发者使用。本文将通过Python编程,解析百度地图API文档中的坐标转换功能,并给出相应的代码示例。一、引言在开发中,我们有时会涉及到坐标的转换问题。百度地图AP

使用Python解析SOAP消息SOAP(SimpleObjectAccessProtocol)是一种基于XML的远程过程调用(RPC)协议,用于在网络上不同的应用程序之间进行通信。Python提供了许多库和工具来处理SOAP消息,其中最常用的是suds库。suds是Python的一个SOAP客户端库,可以用于解析和生成SOAP消息。它提供了一种简单而

随着PHP8.0的发布,许多新特性都被引入和更新了,其中包括XML解析库。PHP8.0中的XML解析库提供了更快的解析速度和更好的可读性,这对于PHP开发者来说是一个重要的提升。在本文中,我们将探讨PHP8.0中的XML解析库的新特性以及如何使用它。什么是XML解析库?XML解析库是一种软件库,用于解析和处理XML文档。XML是一种用于将数据存储为结构化文档

使用Python解析带有命名空间的XML文档XML是一种常用的数据交换格式,能够适应各种应用场景。在处理XML文档时,有时会遇到带有命名空间(namespace)的情况。命名空间可以防止不同XML文档中元素名的冲突,提高了XML的灵活性和可扩展性。本文将介绍如何使用Python解析带有命名空间的XML文档,并给出相应的代码示例。首先,我们需要导入xml.et

PHP中的HTTPBasic鉴权方法解析及应用HTTPBasic鉴权是一种简单但常用的身份验证方法,它通过在HTTP请求头中添加用户名和密码的Base64编码字符串进行身份验证。本文将介绍HTTPBasic鉴权的原理和使用方法,并提供PHP代码示例供读者参考。一、HTTPBasic鉴权原理HTTPBasic鉴权的原理非常简单,当客户端发送一个请求时

PHP爬虫是一种自动化获取网页信息的程序,它可以获取网页代码、抓取数据并存储到本地或数据库中。使用爬虫可以快速获取大量的数据,为后续的数据分析和处理提供巨大的帮助。本文将介绍如何使用PHP实现一个简单的爬虫,以获取网页源码和内容解析。一、获取网页源码在开始之前,我们应该先了解一下HTTP协议和HTML的基本结构。HTTP是HyperText

PHP中的单点登录(SSO)鉴权方法解析引言:随着互联网的发展,用户通常要同时访问多个网站进行各种操作。为了提高用户体验,单点登录(SingleSign-On,简称SSO)应运而生。本文将探讨PHP中的SSO鉴权方法,并提供相应的代码示例。一、什么是单点登录(SSO)?单点登录(SSO)是一种集中化认证的方法,在多个应用系统中,用户只需要登录一次,就能访问


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器