某頁(yè)碼顯示的helper 少量調(diào)整,另附j(luò)s版
更新時(shí)間:2010年09月12日 19:37:50 作者:
某頁(yè)碼顯示的helper 已經(jīng)少量調(diào)整,另附j(luò)s版,需要的朋友可以參考下。
如果你只想下載現(xiàn)成的用,可以到這個(gè)頁(yè)面上去找。
許可證是“WTFPL”,也就是“Do What The Fuck You Want To Public License”。
復(fù)制代碼 代碼如下:
public static class PageNumExt
{
/// <summary>
/// 使用傳入的委托計(jì)算并產(chǎn)生友好的頁(yè)碼。
/// </summary>
/// <param name="o"></param>
/// <param name="currentPage">當(dāng)前頁(yè)碼</param>
/// <param name="actionPageNum">處理頁(yè)碼的方式</param>
/// <param name="actionFolding">處理被折疊頁(yè)碼的方式</param>
/// <param name="maxSiblings">臨近頁(yè)碼的數(shù)量</param>
/// <param name="preventFolding">阻止折疊頁(yè)碼的臨界值,超過這個(gè)數(shù)目的頁(yè)碼將會(huì)被折疊</param>
public static void PageNumView(this object o,
long currentPage, PageNumAction actionPageNum, Action actionFolding,
long maxSiblings = 2, long preventFolding = 1)
{
o.PageNumView(currentPage, actionPageNum, actionPageNum, actionFolding, maxSiblings, preventFolding);
}
/// <summary>
/// 使用傳入的委托計(jì)算并產(chǎn)生友好的頁(yè)碼。當(dāng)前頁(yè)碼將會(huì)被特別對(duì)待。
/// </summary>
/// <param name="o"></param>
/// <param name="currentPage">當(dāng)前頁(yè)碼</param>
/// <param name="actionCurrent">處理當(dāng)前頁(yè)碼的方式</param>
/// <param name="actionPageNum">處理頁(yè)碼的方式</param>
/// <param name="actionFolding">處理被折疊頁(yè)碼的方式</param>
/// <param name="maxSiblings">臨近頁(yè)碼的數(shù)量</param>
/// <param name="preventFolding">阻止折疊頁(yè)碼的臨界值,超過這個(gè)數(shù)目的頁(yè)碼將會(huì)被折疊</param>
public static void PageNumView(this object o,
long currentPage, PageNumAction actionCurrent,
PageNumAction actionPageNum, Action actionFolding,
long maxSiblings = 2, long preventFolding = 1)
{
o.PageNumView(
currentPage, actionCurrent,
1, long.MaxValue,
actionPageNum, i => { },
maxSiblings, actionPageNum,
preventFolding, actionFolding,
maxSiblings, 0,
actionPageNum, i => { }
);
}
/// <summary>
/// 根據(jù)傳入的參數(shù)和委托來計(jì)算并產(chǎn)生友好的頁(yè)碼。當(dāng)前頁(yè)碼將會(huì)被特別對(duì)待。
/// </summary>
/// <param name="o"></param>
/// <param name="currentPage">當(dāng)前頁(yè)碼</param>
/// <param name="actionCurrent">處理當(dāng)前頁(yè)碼的方式</param>
/// <param name="beginPage">預(yù)設(shè)的起始頁(yè)碼</param>
/// <param name="endPage">預(yù)設(shè)的結(jié)束頁(yè)碼</param>
/// <param name="actionPageNum">處理頁(yè)碼的方式</param>
/// <param name="actionFolding">處理被折疊頁(yè)碼的方式</param>
/// <param name="maxSiblings">臨近頁(yè)碼的數(shù)量</param>
/// <param name="preventFolding">阻止折疊頁(yè)碼的臨界值,超過這個(gè)數(shù)目的頁(yè)碼將會(huì)被折疊</param>
public static void PageNumView(this object o,
long currentPage, PageNumAction actionCurrent,
long beginPage, long endPage,
PageNumAction actionPageNum, Action actionFolding,
long maxSiblings = 2, long preventFolding = 1)
{
o.PageNumView(currentPage, actionCurrent, beginPage, endPage, actionPageNum, actionPageNum, actionPageNum, actionFolding, maxSiblings, preventFolding);
}
/// <summary>
/// 根據(jù)傳入的參數(shù)和委托來計(jì)算并產(chǎn)生友好的頁(yè)碼。當(dāng)前頁(yè)碼、起始頁(yè)碼和終止頁(yè)碼都指定了專用的委托來處理。
/// </summary>
/// <param name="o"></param>
/// <param name="currentPage">當(dāng)前頁(yè)碼</param>
/// <param name="actionCurrent">處理當(dāng)前頁(yè)碼的方式</param>
/// <param name="beginPage">預(yù)設(shè)的起始頁(yè)碼</param>
/// <param name="endPage">預(yù)設(shè)的結(jié)束頁(yè)碼</param>
/// <param name="actionBegin">處理起始頁(yè)碼的方式</param>
/// <param name="actionEnd">處理結(jié)束頁(yè)碼的方式</param>
/// <param name="actionSebling">處理臨近頁(yè)碼的方式</param>
/// <param name="actionFolding">處理被折疊頁(yè)碼的方式</param>
/// <param name="maxSiblings">臨近頁(yè)碼的數(shù)量</param>
/// <param name="preventFolding">阻止折疊頁(yè)碼的臨界值,超過這個(gè)數(shù)目的頁(yè)碼將會(huì)被折疊</param>
public static void PageNumView(this object o,
long currentPage, PageNumAction actionCurrent,
long beginPage, long endPage,
PageNumAction actionBegin, PageNumAction actionEnd,
PageNumAction actionSebling, Action actionFolding,
long maxSiblings = 2, long preventFolding = 1)
{
o.PageNumView(
currentPage, actionCurrent,
beginPage, endPage,
actionBegin, actionEnd,
maxSiblings, actionSebling,
preventFolding, actionFolding,
maxSiblings, maxSiblings,
actionSebling, actionSebling
);
}
/// <summary>
/// 根據(jù)傳入的參數(shù)和委托來計(jì)算并產(chǎn)生友好的頁(yè)碼。每一種頁(yè)碼的具體處理方式都需要由調(diào)用方指派委托。
/// </summary>
/// <param name="o"></param>
/// <param name="currentPage">當(dāng)前頁(yè)碼</param>
/// <param name="actionCurrent">處理當(dāng)前頁(yè)碼的方式</param>
/// <param name="beginPage">預(yù)設(shè)的起始頁(yè)碼</param>
/// <param name="endPage">預(yù)設(shè)的結(jié)束頁(yè)碼</param>
/// <param name="actionBegin">處理起始頁(yè)碼的方式</param>
/// <param name="actionEnd">處理結(jié)束頁(yè)碼的方式</param>
/// <param name="currentSiblings">當(dāng)前頁(yè)碼的臨近頁(yè)碼數(shù)量</param>
/// <param name="actionCurrentSibling">處理臨近頁(yè)碼的方式</param>
/// <param name="preventFolding">阻止折疊頁(yè)碼的臨界值,超過這個(gè)數(shù)目的頁(yè)碼將會(huì)被折疊</param>
/// <param name="actionFolding">處理被折疊頁(yè)碼的方式</param>
/// <param name="endOfBegin">起始頁(yè)臨近頁(yè)碼的數(shù)量</param>
/// <param name="beginOfEnd">結(jié)束頁(yè)臨近頁(yè)碼的數(shù)量</param>
/// <param name="actionBeginSibling">處理起始頁(yè)臨近頁(yè)碼的方式</param>
/// <param name="actionEndSibling">處理結(jié)束頁(yè)臨近頁(yè)碼的方式</param>
public static void PageNumView(this object o,
long currentPage, PageNumAction actionCurrent,
long beginPage, long endPage,
PageNumAction actionBegin, PageNumAction actionEnd,
long currentSiblings, PageNumAction actionCurrentSibling,
long preventFolding, Action actionFolding,
long endOfBegin, long beginOfEnd,
PageNumAction actionBeginSibling, PageNumAction actionEndSibling
)
{
long i = beginPage;
// 如果起始頁(yè)小于當(dāng)前頁(yè),就開始處理起始頁(yè)
if (beginPage < currentPage)
#region
{
actionBegin(beginPage);
i++;
endOfBegin += i; // 解決靠近起始頁(yè)的頁(yè)碼之后
var siblingBegin = currentPage - currentSiblings; // 當(dāng)前頁(yè)的臨近頁(yè)從何處開始
var foldingStart = siblingBegin - preventFolding; // 頁(yè)碼折疊的底線
if (endOfBegin > siblingBegin)
endOfBegin = siblingBegin; // 保證當(dāng)前頁(yè)的臨近頁(yè),犧牲起始頁(yè)的臨近頁(yè)
for (; i < endOfBegin; i++)
actionBeginSibling(i);
if (i < foldingStart) // 如果還沒到達(dá)折疊底線,就馬上開始折疊
{
actionFolding();
i = foldingStart + 1; // 跳到折疊之后的頁(yè)碼
}
}
#endregion
// 處理當(dāng)前頁(yè)之前的臨近頁(yè)
for (; i < currentPage; i++)
actionCurrentSibling(i);
// 處理當(dāng)前頁(yè)
actionCurrent(currentPage);
i = currentPage + 1; // 表示當(dāng)前頁(yè)已經(jīng)處理完成。
// 由于不能保證當(dāng)前頁(yè)和期望的起始頁(yè)的關(guān)系,所以在此從當(dāng)前頁(yè)開始計(jì)算。
var goal = i + currentSiblings; // 設(shè)定一個(gè)目標(biāo)
if (goal > endPage) // 目標(biāo)不要超過結(jié)束頁(yè)
goal = endPage;
// 處理當(dāng)前頁(yè)之后的臨近頁(yè),直到到達(dá)目標(biāo)頁(yè)為止
for (; i < goal; i++)
actionCurrentSibling(i);
// 如果結(jié)束頁(yè)大于當(dāng)前頁(yè),就開始處理結(jié)束頁(yè)
if (endPage > currentPage)
#region
{
beginOfEnd = endPage - beginOfEnd; // 計(jì)算出結(jié)束頁(yè)的臨近頁(yè)從何處開始
var foldingStart = beginOfEnd - preventFolding;
if (i < foldingStart) // 沒有觸及折疊底線,馬上開始折疊
{
actionFolding();
i = beginOfEnd;
}
else // 全部當(dāng)作當(dāng)前頁(yè)的臨近頁(yè)來處理,但保留結(jié)束頁(yè)的臨近頁(yè)
for (; i < beginOfEnd; i++)
actionCurrentSibling(i);
for (; i < endPage; i++)
actionEndSibling(i);
actionEnd(endPage);
}
#endregion
}
}
JavaScript版的源代碼可以直接在前面提到的頁(yè)面下載,不過這里也列出一下:
復(fù)制代碼 代碼如下:
!function () {
var g = this;
var def_maxSiblings = 2;
var def_preventFolding = 1;
function pnView1(
currentPage, actionPageNum, actionFolding,
maxSiblings, preventFolding
) {
/// <summary>
/// 使用傳入的委托計(jì)算并產(chǎn)生友好的頁(yè)碼。
/// </summary>
/// <param name="o"></param>
/// <param name="currentPage">當(dāng)前頁(yè)碼</param>
/// <param name="actionPageNum">處理頁(yè)碼的方式</param>
/// <param name="actionFolding">處理被折疊頁(yè)碼的方式</param>
/// <param name="maxSiblings">臨近頁(yè)碼的數(shù)量</param>
/// <param name="preventFolding">阻止折疊頁(yè)碼的臨界值,超過這個(gè)數(shù)目的頁(yè)碼將會(huì)被折疊</param>
pnView2(currentPage, actionPageNum, actionPageNum, actionFolding, maxSiblings || def_maxSiblings, preventFolding || def_preventFolding);
}
function pnView2(
currentPage, actionCurrent,
actionPageNum, actionFolding,
maxSiblings, preventFolding
) {
/// <summary>
/// 使用傳入的委托計(jì)算并產(chǎn)生友好的頁(yè)碼。當(dāng)前頁(yè)碼將會(huì)被特別對(duì)待。
/// </summary>
/// <param name="o"></param>
/// <param name="currentPage">當(dāng)前頁(yè)碼</param>
/// <param name="actionCurrent">處理當(dāng)前頁(yè)碼的方式</param>
/// <param name="actionPageNum">處理頁(yè)碼的方式</param>
/// <param name="actionFolding">處理被折疊頁(yè)碼的方式</param>
/// <param name="maxSiblings">臨近頁(yè)碼的數(shù)量</param>
/// <param name="preventFolding">阻止折疊頁(yè)碼的臨界值,超過這個(gè)數(shù)目的頁(yè)碼將會(huì)被折疊</param>
pnView(
currentPage, actionCurrent,
1, Number.POSITIVE_INFINITY,
actionPageNum, null,
maxSiblings || def_maxSiblings, actionPageNum,
preventFolding || def_preventFolding, actionFolding,
maxSiblings || def_maxSiblings, 0,
actionPageNum, null
);
}
function pnView3(
currentPage, actionCurrent,
beginPage, endPage,
actionPageNum, actionFolding,
maxSiblings, preventFolding
) {
/// <summary>
/// 根據(jù)傳入的參數(shù)和委托來計(jì)算并產(chǎn)生友好的頁(yè)碼。當(dāng)前頁(yè)碼將會(huì)被特別對(duì)待。
/// </summary>
/// <param name="o"></param>
/// <param name="currentPage">當(dāng)前頁(yè)碼</param>
/// <param name="actionCurrent">處理當(dāng)前頁(yè)碼的方式</param>
/// <param name="beginPage">預(yù)設(shè)的起始頁(yè)碼</param>
/// <param name="endPage">預(yù)設(shè)的結(jié)束頁(yè)碼</param>
/// <param name="actionPageNum">處理頁(yè)碼的方式</param>
/// <param name="actionFolding">處理被折疊頁(yè)碼的方式</param>
/// <param name="maxSiblings">臨近頁(yè)碼的數(shù)量</param>
/// <param name="preventFolding">阻止折疊頁(yè)碼的臨界值,超過這個(gè)數(shù)目的頁(yè)碼將會(huì)被折疊</param>
pnView4(currentPage, actionCurrent, beginPage, endPage, actionPageNum, actionPageNum, actionPageNum, actionFolding, maxSiblings || def_maxSiblings, preventFolding || def_preventFolding);
}
function pnView4(
currentPage, actionCurrent,
beginPage, endPage,
actionBegin, actionEnd,
actionSebling, actionFolding,
maxSiblings, preventFolding
) {
/// <summary>
/// 根據(jù)傳入的參數(shù)和委托來計(jì)算并產(chǎn)生友好的頁(yè)碼。當(dāng)前頁(yè)碼、起始頁(yè)碼和終止頁(yè)碼都指定了專用的委托來處理。
/// </summary>
/// <param name="o"></param>
/// <param name="currentPage">當(dāng)前頁(yè)碼</param>
/// <param name="actionCurrent">處理當(dāng)前頁(yè)碼的方式</param>
/// <param name="beginPage">預(yù)設(shè)的起始頁(yè)碼</param>
/// <param name="endPage">預(yù)設(shè)的結(jié)束頁(yè)碼</param>
/// <param name="actionBegin">處理起始頁(yè)碼的方式</param>
/// <param name="actionEnd">處理結(jié)束頁(yè)碼的方式</param>
/// <param name="actionSebling">處理臨近頁(yè)碼的方式</param>
/// <param name="actionFolding">處理被折疊頁(yè)碼的方式</param>
/// <param name="maxSiblings">臨近頁(yè)碼的數(shù)量</param>
/// <param name="preventFolding">阻止折疊頁(yè)碼的臨界值,超過這個(gè)數(shù)目的頁(yè)碼將會(huì)被折疊</param>
pnView(
currentPage, actionCurrent,
beginPage, endPage,
actionBegin, actionEnd,
maxSiblings || def_maxSiblings, actionSebling,
preventFolding || def_preventFolding, actionFolding,
maxSiblings || def_maxSiblings, maxSiblings || def_maxSiblings,
actionSebling, actionSebling
);
}
function pnView(
currentPage, actionCurrent,
beginPage, endPage,
actionBegin, actionEnd,
currentSiblings, actionCurrentSibling,
preventFolding, actionFolding,
endOfBegin, beginOfEnd,
actionBeginSibling, actionEndSibling
) {
/// <summary>
/// 根據(jù)傳入的參數(shù)和委托來計(jì)算并產(chǎn)生友好的頁(yè)碼。每一種頁(yè)碼的具體處理方式都需要由調(diào)用方指派委托。
/// </summary>
/// <param name="o"></param>
/// <param name="currentPage">當(dāng)前頁(yè)碼</param>
/// <param name="actionCurrent">處理當(dāng)前頁(yè)碼的方式</param>
/// <param name="beginPage">預(yù)設(shè)的起始頁(yè)碼</param>
/// <param name="endPage">預(yù)設(shè)的結(jié)束頁(yè)碼</param>
/// <param name="actionBegin">處理起始頁(yè)碼的方式</param>
/// <param name="actionEnd">處理結(jié)束頁(yè)碼的方式</param>
/// <param name="currentSiblings">當(dāng)前頁(yè)碼的臨近頁(yè)碼數(shù)量</param>
/// <param name="actionCurrentSibling">處理臨近頁(yè)碼的方式</param>
/// <param name="preventFolding">阻止折疊頁(yè)碼的臨界值,超過這個(gè)數(shù)目的頁(yè)碼將會(huì)被折疊</param>
/// <param name="actionFolding">處理被折疊頁(yè)碼的方式</param>
/// <param name="endOfBegin">起始頁(yè)臨近頁(yè)碼的數(shù)量</param>
/// <param name="beginOfEnd">結(jié)束頁(yè)臨近頁(yè)碼的數(shù)量</param>
/// <param name="actionBeginSibling">處理起始頁(yè)臨近頁(yè)碼的方式</param>
/// <param name="actionEndSibling">處理結(jié)束頁(yè)臨近頁(yè)碼的方式</param>
var i = beginPage;
// 如果起始頁(yè)小于當(dāng)前頁(yè),就開始處理起始頁(yè)
if (beginPage < currentPage) {
actionBegin && actionBegin(beginPage);
i++;
endOfBegin += i; // 解決靠近起始頁(yè)的頁(yè)碼之后
var siblingBegin = currentPage - currentSiblings; // 當(dāng)前頁(yè)的臨近頁(yè)從何處開始
var foldingStart = siblingBegin - preventFolding; // 頁(yè)碼折疊的底線
if (endOfBegin > siblingBegin)
endOfBegin = siblingBegin; // 保證當(dāng)前頁(yè)的臨近頁(yè),犧牲起始頁(yè)的臨近頁(yè)
for (; i < endOfBegin; i++)
actionBeginSibling && actionBeginSibling(i);
if (i < foldingStart) // 如果還沒到達(dá)折疊底線,就馬上開始折疊
{
actionFolding && actionFolding();
i = foldingStart + 1; // 跳到折疊之后的頁(yè)碼
}
}
// 處理當(dāng)前頁(yè)之前的臨近頁(yè)
for (; i < currentPage; i++)
actionCurrentSibling && actionCurrentSibling(i);
// 處理當(dāng)前頁(yè)
actionCurrent && actionCurrent(currentPage);
i = currentPage + 1; // 表示當(dāng)前頁(yè)已經(jīng)處理完成。
// 由于不能保證當(dāng)前頁(yè)和期望的起始頁(yè)的關(guān)系,所以在此從當(dāng)前頁(yè)開始計(jì)算。
var goal = i + currentSiblings; // 設(shè)定一個(gè)目標(biāo)
if (goal > endPage) // 目標(biāo)不要超過結(jié)束頁(yè)
goal = endPage;
// 處理當(dāng)前頁(yè)之后的臨近頁(yè),直到到達(dá)目標(biāo)頁(yè)為止
for (; i < goal; i++)
actionCurrentSibling && actionCurrentSibling(i);
// 如果結(jié)束頁(yè)大于當(dāng)前頁(yè),就開始處理結(jié)束頁(yè)
if (endPage > currentPage) {
beginOfEnd = endPage - beginOfEnd; // 計(jì)算出結(jié)束頁(yè)的臨近頁(yè)從何處開始
var foldingStart = beginOfEnd - preventFolding;
if (i < foldingStart) // 沒有觸及折疊底線,馬上開始折疊
{
actionFolding && actionFolding();
i = beginOfEnd;
}
else // 全部當(dāng)作當(dāng)前頁(yè)的臨近頁(yè)來處理,但保留結(jié)束頁(yè)的臨近頁(yè)
{
for (; i < beginOfEnd; i++)
actionCurrentSibling && actionCurrentSibling(i);
}
for (; i < endPage; i++)
actionEndSibling && actionEndSibling(i);
actionEnd && actionEnd(endPage);
}
}
g.pnView1 = pnView1;
g.pnView2 = pnView2;
g.pnView3 = pnView3;
g.pnView4 = pnView4;
g.pnView5 = pnView;
g.pnView = pnView;
} ();
/201009/yuanma/pnView_NanaView.rar
您可能感興趣的文章:
- js實(shí)現(xiàn)下一頁(yè)頁(yè)碼效果
- javascript分頁(yè)代碼(當(dāng)前頁(yè)碼居中)
- javascript 支持頁(yè)碼格式的分頁(yè)類
- 原生js和jquery實(shí)現(xiàn)圖片輪播特效
- javascript結(jié)合CSS實(shí)現(xiàn)蘋果開關(guān)按鈕特效
- js實(shí)現(xiàn)圖片無縫滾動(dòng)特效
- 一個(gè)簡(jiǎn)單的JS鼠標(biāo)懸停特效具體方法
- js文字橫向滾動(dòng)特效
- js實(shí)現(xiàn)文字閃爍特效的方法
- 23個(gè)Javascript彈出窗口特效整理
- 兼容多瀏覽器的字幕特效Marquee的通用js類
- 純JS實(shí)現(xiàn)可用于頁(yè)碼更換的飛頁(yè)特效示例
相關(guān)文章
JavaScript詳解使用Promise處理回調(diào)地獄與async?await修飾符
這篇文章主要介紹了JavaScript使用Promise處理回調(diào)地獄與async?await修飾符,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
JavaScript實(shí)現(xiàn)數(shù)字?jǐn)?shù)組按照倒序排列的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)數(shù)字?jǐn)?shù)組按照倒序排列的方法,涉及javascript中sort方法的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
詳解JavaScript中Math內(nèi)置對(duì)象基本方法的使用
Math?是javaScript的內(nèi)置對(duì)象,包含了部分?jǐn)?shù)學(xué)常數(shù)屬性和數(shù)學(xué)函數(shù)方法。本文將詳細(xì)講解Math基本方法的使用,感興趣的小伙伴可以學(xué)習(xí)一下2022-04-04
用原生js做個(gè)簡(jiǎn)單的滑動(dòng)效果的回到頂部
很多網(wǎng)頁(yè)在下方都會(huì)放置一個(gè)“返回頂部”按鈕,這樣可以幫助訪客重新找到導(dǎo)航或者重溫一遍廣告,于是將返回頂部功能做成了滑動(dòng)效果2014-10-10

