H5單頁面手勢滑屏切換原理

威武的大白菜發表於2024-04-19

H5單頁面手勢滑屏切換是採用HTML5 觸控事件(Touch) 和 CSS3動畫(Transform,Transition)來實現的,效果圖如下所示,本文簡單說一下其實現原理和主要思路。

1、實現原理

假設有5個頁面,每個頁面佔螢幕100%寬,則建立一個DIV容器viewport,將其寬度(width) 設定為500%,然後將5個頁面裝入容器中,並讓這5個頁面平分整個容器,最後將容器的預設位置設定為0,overflow設定為hidden,這樣螢幕就預設顯示第一個頁面。

CSS樣式:

註冊touchstart,touchmove和touchend事件,當手指在螢幕上滑動時,使用CSS3的transform來實時設定viewport的位置,比如要顯示第二個頁面,就設定viewport的transform:translate3d(100%,0,0) 即可, 在這裡我們使用translate3d來代替translateX,translate3d可以主動開啟手機GPU加速渲染,頁面滑動更流暢。

2、主要思路

從手指放在螢幕上、滑動操作、再到離開螢幕是一個完整的操作過程,對應的操作會觸發如下事件:

手指放在螢幕上:ontouchstart

手指在螢幕上滑動:ontouchmove

手指離開螢幕:ontouchend

我們需要捕獲觸控事件的這三個階段來完成頁面的滑動:

ontouchstart: 初始化變數, 記錄手指所在的位置,記錄當前時間

ontouchmove: 獲得當前所在位置,計算手指在螢幕上的移動差量deltaX,然後使頁面跟隨移動

ontouchend:手指離開螢幕時,計算螢幕最終停留在哪一頁。首先計算手指在螢幕上的停留時間deltaT,如果deltaT

(1)如果是快速滑動,則讓當前頁面完整的停留在螢幕中央(需要計算當前頁面還有多少需要滑動)

(2)如果是慢速滑動,還需要判斷手指在螢幕上滑動的距離,如果滑動的距離沒有超過螢幕寬度50%,則要回退到上一頁,相反則要停留在當前頁面

除此之外,還要計算當前頁面是第幾頁,並設定當前頁碼

基本的思路就這些,當然在實際操作過程中還有一些細節需要注意,這裡就不詳細說了,都在程式碼裡能體現出來,原始碼已傳至Git:https://github.com/git-onepixel/guesture, 有興趣的同學歡迎一起討論,(由於時間原因,本示例沒有加入history路由),你也可以點選或掃描下面二維碼來檢視示例效果:

 

相關文章