"Axure教程:列表拖動排序"

本文將為大家介紹如何用Axure實現列表拖動排序的上下拖動,希望該教程對你有所幫助。

最近使用Axure過程中碰到要對列表做排序,自然想到的是用中繼器來實現。看了這篇文章《Axure教程:列表拖動排序的實現方式》 受到了不少的啟發,但是只能向上拖動畢竟不太好,經過研究發現還是有辦法實現上下拖動的。

我使用的是Axure RP 9,如果是Axure RP 8原理上基本相同。

一、原型原理

要進行拖動排序,主要是計算拖動到達的位置處於整個列表的相對位置,再進行插入。

二、思考過程

要進行拖動,就要使用動態面板。

動態面板放在中繼器里可以很容易的獲取到中繼器里的數據

但是如果直接拖動動態面板,就會像上面提到的文章一樣,只能往上拖動,往下拖動會把排在下方的條目往下推,達不到排序的目的。

這裡只需要將被拖動的元件放在中繼器外,拖動拖成中將中繼器里的數據放在被拖動的元件上即可!

三、動手實現

01 中繼器

我們先拖入一個中繼器,在正常的數據以外增加一列標題為OrderNumber

Name列填入A ~ E

OrderNumber列填入0 ~ 4

中繼器內矩形長寬改為200*40方便點擊拖動

再對中繼器添加一個載入時按照OrderNumber升序排序

02

將中繼器里的元件複製一份放在中繼器外,取名“拖動塊”,並設置載入時隱藏。

03

中繼器外面放一個按鈕,主要用來觸發排序和整理OrderNumber,也設置為載入時隱藏。

04

在中繼器里放入一個動態面板,用來觸發拖動。

05

下麵我們就來設置動態面板上的互動:

1)拖動開始時

  • 設置拖動塊的文本為[[Item.Name]]
  • 移動拖動塊“到達”所鼠標所指向的條目的位置,通過OrderNumber來計算即可

(X坐標為 中繼器的x坐標;Y坐標為 中繼器的y坐標 + 該條目的序號 * 每個條目的高度)

顯示拖動塊

2)拖動時,移動拖動塊跟隨拖動

我這裡並沒有添加邊界,如果需要也可以添加上。添加邊界要註意一個地方,y軸上要留出空間,允許拖動到第一個條目的上方。

3)拖動結束時

計算中繼器和拖動塊y坐標的距離來確定OrderNumber,值為 [[(LVAR2.y-LVAR1.y)/40]]

觸發中繼器外的按鈕

按鈕單擊時 將中繼器的OrderNumber列更新為[[TargetItem.index-1]]。

OrderNumber用來排序的同時,也用來計算拖動塊出現的位置,所以拖動一次後就要更新為0 ~ N-1的整數,TargetItem.index是從1開始,所以要減1。

被更新的行的順序就是當前排序的順序,所以這樣更新不會改變當前的排序。

規則寫的是true,在實際使用中可以用其他條件,比如該行的可見性等條件來更新, 經測試,中繼器篩選不顯示的行,不會被更新OrderNumber。

移動拖動塊到達排序後的位置

將移動的過程添加一個200ms的動畫

等待200ms後把拖動塊隱藏起來,整個拖動排序就完成了

效果完成了,我們還可以在中繼器里的條目上,加入一塊相同尺寸的75%不透明度的矩形,拖動開始時顯示,拖動結束時隱藏,再加上文字提示可以拖動排序,頁面的效果就能更擬真。

寫在最後

有人說也就幾條註釋或跟技術人員幾句話就能交待過去,何必花功夫去模擬這個效果 。但如果時間允許,我們我們還是應該儘量將頁面效果用最直觀的方式表現出來,方便跟客戶展示,也方便設計師、程序員查看。

本文由@Goffe 原創發佈於人人都是產品經理,未經許可,禁止轉載

題圖來自Unsplash,基於CC0協議

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *