APP頁面上下滑動及彈回效果實現(xiàn)

11 評論 19240 瀏覽 52 收藏 10 分鐘

下拉刷新以及上拉滑動頁面,是每個app都具備的最基礎的交互效果,本文旨在模擬一個大概效果,細節(jié)可忽略。

操作環(huán)境

軟件版本:AXURE 8.0 中文版;

操作系統(tǒng):win7 64位操作系統(tǒng);
瀏 覽 ?器:Chrome?版本 63.0.3239.132(正式版本) (64 位)

實現(xiàn)步驟

元件擺放

兩層動態(tài)面板,外層動態(tài)面板是手機的可視范圍,可以理解為手機的屏幕顯示區(qū)域;

里層的動態(tài)面板是具體的頁面內(nèi)容,是需要被移動的內(nèi)容;

上下拖動

拖動外層【屏幕動態(tài)面板】時,垂直移動內(nèi)層的【內(nèi)容動態(tài)面板】,同時要設定頁面的頂部及頁面的底部邊界范圍,不能出界。

彈回效果

移動結(jié)束時,讓內(nèi)容頁面頂部彈回至與頂部菜單對齊;頁面底部彈回至與底部菜單對齊。

想看效果的,請直接拉到底部鏈接。

下面開始詳細操作過程,因為是新手入門,會講的非常細,也會稍顯啰嗦,高手請忽略。

第一步,元件擺放及動態(tài)面板嵌套

(1)拉2個矩形框,分別是頂部(命名top)和底部(命名bottom);

(2)添加一個矩形為屏幕顯示層(設置其為動態(tài)面板,命名view),然后點擊view的state1進去,設置其為動態(tài)面版(命名content),長度隨意設置,但需要大于view的高度,這樣才有拖動的效果;

(3)最后設置content的state1(即最終看到的頁面內(nèi)容),這里隨便放2張圖片,方便演示。

每個矩形的尺寸如下:

top、bottom:(300,50)

view:(300,450)

con:(300,800)

設置完之后,回到最開始的主頁面會看到是這樣:

這是因為,內(nèi)容層默認把外圍的view層撐大了,這里需要重新調(diào)整view層的高度為最開始設置的高度,即450,同時要設置top、bot為最頂層,否則會被覆蓋。設置完之后看到的界面及頁面層級是這樣的:

第二步,設置垂直移動交互,限定邊界

頁面擺放完之后,下面開始交互。

這一步主要就是設置好頁面的上下拖動(滑動)的效果,并限制好頁面的頂部、底部邊界范圍:不能無限制的上下移動,需要給定一個限制范圍。

邏輯實現(xiàn):

拖動view層的時候,移動con層,并設定好con移動的邊界。

具體操作:

選定view層,添加交互用例【拖動時】,添加【移動】動作,勾選con層,移動效果選擇:垂直拖動。

然后,設置界限,添加邊界。

邊界設置,依次設置頂部,底部。下面演示兩種不同的邊界效果(熟練以后,可自行設定任意邊界范圍)

第一種效果

頁面(con層)向下拖動時,頂部不能脫離top層的下邊;頁面(con層)向上拖動時,底部不能脫離bot層的上邊。因為設置邊界是通過Y坐標來實現(xiàn)的。

所以,設置邊界之前需要搞清楚元件的Y坐標是怎么回事,怎么獲取。這里先看設置操作,后面具體細講坐標。

這里的邊界設定,其實就是設置Y坐標位置。

要想頁面的頂部不能脫離top的下邊界,那么con層的Y坐標范圍需要限定在什么范圍?首先,需要搞清楚坐標原點的位置在哪里。坐標原點位置如下(紅點位置):

那么頁面頂部的Y軸坐標只能在<0?的范圍移動(即頁面向上移動,Y坐標為負);

同理,底部的Y坐標只能在?>view層高度?的范圍內(nèi)移動(即只能向下移動),這樣上下邊界就設定好了。

那么問題來了,view層的高度怎么獲???

難道直接填寫高度450嗎?(本例中,view的高度是450),如果直接填寫450,效果是可以實現(xiàn)的。但如果我們修改了view的高度的話,需要重新設定邊界,這樣比較麻煩。

獲取view的高度,還有另外一個辦法,用變量和函數(shù)即可。

我們移動屏幕的時候,其實拖動的是view層,即當前操作對象是view層,所以獲取view的高度可以用 this.height 語法來表達(關于具體語法及函數(shù),自行研究)

AXURE的函數(shù)或變量,通用格式為:

[[變量及函數(shù)]]

因此,最終的表達式可以寫成 [[this.height]] 即可。最終的設置如下:

效果預覽可自己體會。

第二種效果

頁面頂部最多可以下拉到屏幕一半的高度,底部最多可以上滑到屏幕一半的高度。根據(jù)以上的邏輯,只需要把坐標改一下即可:

頂部<=[[this.height/2]],

底部>=[[this.height/2]],

移動預覽截圖效果:

第三步,設置頁面上下邊界回彈的效果

針對上面第二種效果,我們來實現(xiàn):

當頁面頂部下滑出top的下邊界時,需要回彈到top的下邊界(下拉刷新效果);

當頁面底部上拉遠離bot上邊界時,需要回彈到bot的上邊界(我們是有底線的效果)

邏輯實現(xiàn)及交互:

我們拖動view層結(jié)束的時候,如果頁面頂部Y坐標>0,那么移動頁面頂部的Y坐標回到原點位置(0,0)(即回到top下邊界);

同理,我們拖動view層結(jié)束的時候,如果頁面底部Y坐標<view的高度,那么移動頁面底部的Y坐標回到位置(0,view高度)(即回到bot上邊界);

以上邏輯需要用函數(shù)來表達。

設置頂部效果

首先得出頂部的臨界值。

因為頁面頂部與con的Y坐標是一致的,此時的臨界值就是0,當它從原點(0,0)開始向下滑動時,用函表達就是:[[con.y]]>0,(con.y表示變量con的Y坐標值,也就是紅點的那個Y坐標值,需要提前定義局部變量con為con層,否則函數(shù)不能生效。)

即 如果 [[con.y]]>0,那么 移動 con層到(0,0),同時給一個動畫效果:緩慢退出。

設置底部效果

首先搞清楚的臨界值,即頁面底部與bot挨著的時候,此時,CON的Y坐標值(以原點位置開始算的)是處于最上面的隱藏看不見的位置,那么此時,con.y的值是多少呢?是 【view高度-con的高度】(為負值),如果繼續(xù)上滑的時候,Y坐標值就會小于臨界值。

表達式就是[[con.y]]<[[this.heing-con.height]],移動con層到(0,[[this.height-con.height]])。

最終的操作如下:

需要注意的是,用到con.y的函數(shù)時,都需要設定con為局部變量,否則無法生效。設定條件如下:

最終效果預覽如下:https://wkaay5.axshare.com。

~~~END~~~

 

本文由 @恒亮 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

更多精彩內(nèi)容,請關注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 講的挺詳細的 贊

    來自吉林 回復
  2. 完全照著您的方法做的,為什么還是無法實現(xiàn)自動彈回?

    來自河南 回復
  3. 底部效果,按照你的方法沒實現(xiàn)啊

    來自河南 回復
  4. 好文章學習了

    來自廣東 回復
  5. 好文章,不必糾結(jié)用不用這么費勁,學習學習沒有壞處

    來自廣東 回復
  6. 做得還可以唉,人家樂意做,噴的人什么心態(tài)?

    來自安徽 回復
  7. 人家研究的領域不一樣,興趣所在,未必就就是沒用,這也是算個技術活,大伙拍的有點重

    來自北京 回復
  8. 如果你告訴大家什么類型的app適用什么樣式的上下滑動、回彈效果,以及分析影響,可能更受歡迎一點 ??

    來自廣東 回復
    1. 手機app中,向下拉動,刷新頁面時會用到

      回復
  9. 搗鼓這個肯定閑得慌

    回復
  10. 一句話能說清楚的,怎么要去畫半天,時間多放在產(chǎn)品體驗設計上

    回復