玩轉 H5 下拉上滑動效


按照上面的技術方案實施,具體過程為:

禁用頁面頂部下拉事件  ------>  將頁面的主體內容用一個DIV容器包含起來,同時復制需要放大處理的內容節點至主體內容之外  ------> 綁定頁面滑屏事件  ------> 計算滑屏偏移量以及縮放等數值的運算  ------> 根據變化數值主體內容transfrom下滑,同時復制的節點做放大動效處理  ------> 監聽滑屏事件結束,執行回彈動效,還原初始狀態

代碼節選片段:

代碼1

要點及說明:

1、禁用頁面頂部下拉事件:

該技術要點是阻止默認事件的下拉,從而將下拉事件綁定到我們的動效中。阻止默認事件我們一般可以這樣子處理:

代碼2

但是此方法有一定缺陷。首先他禁止了頁面的正常滑動,給頁面的造成了不少的干擾和麻煩;其次是在一些APP中的WebView中並不能根本上的阻止View的下拉,對頁面動效造成干擾。

這里最好的一個處理方法是可以在WebView的層面上去禁止頁面下拉。

2、需判斷滑屏方向,避免橫向滑動干擾下拉動效。公式計算:

X = 絕對值(當前坐標X - 初始坐標X)
Y = 絕對值(當前坐標Y - 初始坐標Y)

計算結果X大於Y,則為橫向滑動,反之為豎向滑動。

CODE3

3、滑屏偏移量,縮放動效及下拉動效的數值公式計算

碼4

4、動效結束,慣性回彈動效

回彈效果是模擬慣性的曲線運動,由前面代碼片段中的 to() 動畫函數完成。下面是曲線運動函數:

code5

該方法來源於AlloyTouch組件。

5、存在的待優化問題:

滑屏動效與原生動效在細節上還是有差別,具體算法有待更進一步的優化。

三、Demo效果演示

 

 

至此,頂部的banner圖放大的動效已經完成。

除了頂部的banner圖可以這樣子玩,我們還嘗試了更多花樣,例如頂部的slider輪播圖也增加下拉放大的動效。由於這里的結構更為復雜,且slider輪播圖的內容會改變的,因此放大動效部分的內容也需要保持更換。實現后的效果如下:

 

 

注:因為部分安卓性能較差,會影響動畫效果,此效果在IOS手機體驗效果更佳。

另外,除了在現有元素上做動畫,我們也可以下拉時增加一些有趣的元素,例如彩蛋、品牌元素等,實現方法與上面一致,只是不需要拷貝DOM結構那一步,而是直接寫一個需要執行動效的DOM結構。實現后的效果如下:

 

 

四、除了下拉動效還能做上滑動效嗎?

前面我們已經實現了下拉動效,那么我們是否可以繼續擴散思路,也可以用在別的場景呢?比如我們在頁面滑到底部時可以拉出一個有趣的動畫作為彩蛋。

答案是肯定的,Do it!

技術方案與實現

這里下拉動效與上滑動效實現原理基本一致,但不同的是需要監聽頁面滾動到底部,然后再觸發動效。

部分代碼如下:

code6

最后的演示效果演示如下:

 

 

五、總結

在體驗至上的現今,我們的產品對體驗更是精益求精。面臨不同的產品需求,我們需要正確選擇恰當的技術解決方案,不管是原生開發、H5開發、還是Hybrid App混合開發,其最終的目的是完美的解決產品需求,沒有最好的技術,只有最佳的技術解決方案。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM