(最初,该提示作為操作提示發佈,其中包含我的答案。我現在將我的答案分為以下"答案"部分).
更具體地說:
假設您要向使用者顯示一組記錄,並分成固定大小的頁面(例如Google搜尋的結果).如果只有几个頁面,則可以在結果的結尾顯示頁面匯航區域,如下所示:
[<<] [<] 1 2 3 4 5 6 7 8 9 10 11 12 13 [>] [>>]
但是,如果結果的頁數超過20或30頁,這很快就会變得不合時宜。
有時您会看到類似這樣的內容:
[<<] [<] ... 665666667668 669 670671672673 ... [>] [>>]
或者這个:
[<<] [<] 1 2 3 ... 667668 669 670671 ... 845846847 [>] [>>]
,但是在两種情况下,匯航到" ..."部分中間的任何位置都將需要很多次mousclicks.有時会提供一个直接輸入頁碼的輸入框.否則(假設我们在這裏谈論的是網頁),精明的使用者很可能会查看URL以查看他们是否可以直接對其进行編輯。
最好是具有一个分頁顯示,使使用者只需單击几下滑鼠即可訪問任何頁面,而無需拥有過多的鏈接。
如何最好地實現?
- 5月前1 #
- 5月前2 #
JavaScript中"對數頁面匯航"的簡化版本:
生成下拉選單.该示例只是document.write的示例,但是您可以根据需要进行进一步開發(添加onChange等).借助http://www.basereality.com/PHPToJavascript来进行Javascript轉換。
<script> function paginationLink(p, page) { if (p == page) return '<option selected value="' + p + '">' + p + '</option>'; return '<option value="' + p + '">' + p+ '</option>'; } function paginationHTML(page, lastPage) { var LINKS_PER_STEP = 5; // Now calculate page links... var lastp1 = 1; var lastp2 = page; var p1 = 1; var p2 = page; var c1 = LINKS_PER_STEP + 1; var c2 = LINKS_PER_STEP + 1; var s1 = ''; var s2 = ''; var step = 1; var result = 0; while (true) { if (c1 >= c2) { s1 += paginationLink(p1, page); lastp1 = p1; p1 += step; c1--; } else { s2 = paginationLink(p2, page) + s2; lastp2 = p2; p2 -= step; c2--; } if (c2 == 0) { step *= 10; p1 += step - 1; // Round UP to nearest multiple of $step p1 -= (p1 % step); p2 -= (p2 % step); // Round DOWN to nearest multiple of $step c1 = LINKS_PER_STEP; c2 = LINKS_PER_STEP; } if (p1 > p2) { result += s1 + s2; if ((lastp2 > page) || (page >= lastPage)) return result; lastp1 = page; lastp2 = lastPage; p1 = page + 1; p2 = lastPage; c1 = LINKS_PER_STEP; c2 = LINKS_PER_STEP + 1; s1 = ''; s2 = ''; step = 1; } } } document.write('Menu generated with JavaScript <select>' + paginationHTML(765, 5055))+'</select>'; </script>
- 5月前3 #
如何:
a)添加<-100<-10 [分頁] +10>+100>而不是炸毁分頁本身
b)提供直接頁面輸入[#..] [视圖],根据有效頁面範圍過濾輸入
c)需要一些適当的編碼,但是:將內部浮動範圍擴大+/- 10,+ /-25,+ /-100頁,而不是擴大整个分頁範圍
- 5月前4 #
我想到了對數分頁的两種選擇:
如果相關,您可以將資料分為部分,章节和书籍.這是旧的方式,当時纸张是王者,而圖书馆則从事網際網路工作.某些PDF文件仍然具有该功能。
如果有人想跳到
supercalifragilisticexpialidocious
的大資料部分,則可以提供一个搜尋框ala wikipedia。 被提及。
這是我的解決方案-使用"對數頁面匯航":
這可以通過根据与端點或当前頁面的距离對數分配頁碼来實現.這是我的意思的示例:
1 2 3 4 5 6. 10. 20. 30. 40. 50 .. 100 .. 200. 210. 220. 230. 240. 250. 252253254255255 257 258259260261262. 270. 280. 290. 300 310..400..500..600..700..800..900..950 960年. 970. 980. 990. 995996997997998999 1000
請註意,間隔如何从1s擴充套件到10s,再到100s(依此類推). (我使用10的幂,但是原則上您可以使用其他方案-例如2的幂)。
我在2004年編寫了一些實現此目的的代碼,並认為我会在這裏共享它.有PHP和ASP版本,但是邏輯應该易於翻译成任何語言.請註意,底部的位(在两種情况下)仅顯示一些示例.顯然,格式需要进行自定義以匹配您的網頁(或應用程式),因此這裏非常基础. Alter
LINKS_PER_STEP
在paginationHTML
以確定隨着您离開端點或当前頁面而在步长增加之前顯示多少个數字。對於更紧凑的輸出,您還可以考虑更改代碼,以使編號在端點週圍不"密集"(即仅在当前頁面週圍密集).
這是代碼:
PHP版本: ASP版本: Javascript版本(在完整的測試頁中):