移動端互動優化

2022-08-16 11:03:13 字數 1868 閱讀 2278

1、移動web頁面上click事件響應有300ms延遲

原因:移動裝置訪問的web頁面都是pc上的頁面。在預設viewport(980px)的頁面往往需要「雙擊」或「捏開」放大頁面。而正是為了確認使用者是「雙擊」還是「單擊」。

safari 需要300ms 的延遲來判斷。而後來的iphone,android也沿用這樣的設計。

舉例:如果你點選一下,在300ms內再點選第二次就認為是雙擊事件。

1.1) 如何解決?

利用tap事件代替click 

自定義tap事件原理:

在touchstart、touchend時記錄時間、手指位置,在touchend時進行比較,如果手機位置為同一位置(或允許移動乙個非常熊德位移值)且時間間隔較短(一般認為是200ms)

過程中未曾觸發過touchmove。即可認為觸發了手持裝置上的「click」,一般稱它為「tap」.(一般使用zepto.js框架)

1.2)問題: tap 「點透」的bug;描述: 點選按鈕最上面的蒙層,但是蒙層下的按鈕也會觸發。

點透發生過程:  touchstart , touchend蒙層消失, 此時由於300ms導致下面的click觸發

關於tap 穿透的解決方案:

①使用緩動動畫,過渡300ms的延遲。

② 中間層dom元素的加入,讓中間接受這個「穿透」事件

③ 「上下」都使用tap事件,原理上解決tap 透傳事件(但不可避免原生標籤的click事件)

④ 改用fastclick的庫(聽過最新的zepto已經fixed掉這個bug)

2、tap事件為自定義事件,基於touch基礎事件。

2.1)觸控才是移動裝置的互動核心事件。

touchstart: 手指觸控螢幕觸發(已經有手指放螢幕上不會觸發)

touchmove: 手指在螢幕上滑動,連續觸發

touchend: 手指離開螢幕時觸發

touchcancel:系統取消touch時候觸發(不常用)

2.2)除了常見的事件屬性外,觸控事件包含專有的觸控屬性。

touches: 跟蹤觸控操作的touch物件陣列。

targettouches: 特定事件目標的touch物件陣列;

changetouches: 上次觸控改變的touch 物件陣列

2.3)每個touch物件包含屬性--根據touch物件跟蹤觸控具體位置,從而判斷觸控互動或手勢事件

clientx: 觸控目標在視口中的x座標,clienty

pagex: 觸控目標在頁面中的x座標(包含滾動),pagey

screenx:觸控目標在螢幕中的x座標,screeny

target: 觸控的dom節點目標

identifier: 標識觸控的唯一id

2.4) android 4.0,4.1,4.4只會觸發一次touchstart,一次touchmove,touchend不觸發

解決方案: 在touchmove中加入:event.preventdefault()---------touchmove多次觸發,touchend 結束觸發

導致問題: 預設行為不發生,如:scroll,導致頁面不滾動

2.5)常用touch相關的互動效果

① 彈性滾動

當客戶端的頁面滾動到頂部或底部時候,滾動條會收縮並讓我們多滑動一定距離。通過緩衝**的效果,帶給使用者良好的體驗。

但滾動有幾種情況:

1、body層滾動:自帶彈性滾動,overflow: hidden 失效,gif和定時器暫停

2、區域性滾動:沒有彈性滾動,沒有滾動慣性,不流暢

如何開啟?  body

注意: android不支援原生的彈性滾動,但是可以借助第三方庫iscroll來實現

② 下拉重新整理

③ 上拉載入:使用scroll事件,而不是touch事件

js移動端互動 移動端互動大綱篇

day01.基礎事件 1 touchstart介紹及使用 2 touchmove介紹及使用 3 touchend介紹及使用 4 案例分析 day02.event物件 1 取消預設事件 2 阻止冒泡 3 防止文字選中和阻止預設選單 4 滑鼠事件延遲 5 事件點透問題 6 案例分析 day03.觸控事件...

移動端資料互動

和移動端對接沒有明確的介面文件可謂是,瞎子摸馬啊!但是最終還是搞定了。json decode file get contents php input r true 這樣移動端post提交給後端的 json資料就可以正常接收處理了。關聯陣列 echo json encode array a aaa b...

移動web 終端互動優化

移動web頁面上的click事件相應都要慢上300ms 1.tap基礎事件 300ms延遲怎麼破?使用tap事件代替click事件 自定義 tap事件原理 在touchstart touchend時記錄時間 手指位置,在touchend時進行比較,如果手指位置為同一位置 或允許移動乙個非常小的位移值...