刚才做项目,要做一个列表,带翻页的,本来想偷个懒,用下其他项目的代码,想想,还是写个通用的吧。
效果预览:
话不多说,直接上代码
/// <summary> /// 生成翻页器HTML 使用示例看https://www.yangguangdream.com/?id=2191 /// </summary> /// <param name="currentPage">当前页</param> /// <param name="totalPage">页总数</param> /// <param name="pageCount">下面显示页码的数量(推荐用奇数),默认5</param> /// <param name="url">目标页面的url,页码部分用占位符代替,如{{page}}</param> /// <param name="urlFormat">url参数中提到的占位符,默认为{{page}}</param> /// <param name="pageBreakClass">页码省略符的class,用于设定样式</param> /// <param name="pageTextClass">翻页上一页下一页的class,用于设定样式</param> /// <param name="pageNumClass">页码数字的class,用于设定样式</param> /// <param name="pageCurClass">当前页的class,用于设定样式</param> /// <param name="pageTarget">翻页打开目标(当前页,新窗口),默认_self</param> /// <param name="prevPageText">上一页的链接文本</param> /// <param name="nextPageText">下一页的链接文本</param> /// <param name="pageBreakText">页码省略符的文本,默认为"..."</param> /// <returns></returns> public static string getPageBarHtml(int currentPage, int totalPage, int pageCount = 5, string url = "", string urlFormat = "{{page}}", string pageBreakClass = "pageBreak", string pageTextClass = "pageText", string pageNumClass = "pageNum", string pageCurClass = "pagecur", string pageTarget = "_self", string prevPageText = "上一页", string nextPageText = "下一页", string pageBreakText = "...") { StringBuilder sb = new StringBuilder(); //总页数大于1 if (totalPage > 1) { if (currentPage == 1) { //当前页为1的情况 sb.AppendFormat("<span class=\"{0} {1}\">{2}</span>", pageTextClass, pageCurClass, prevPageText); sb.AppendFormat("<span class=\"{0} {1}\">1</span>", pageNumClass, pageCurClass); for (int i = 2; i <= (currentPage + pageCount - 1 < totalPage ? currentPage + pageCount - 1 : totalPage); i++)//以小的来,如果pagecount { string cpage = i.ToString(); sb.AppendFormat("<a href=\"{0}\" class=\"{1}\" target=\"{2}\">{3}</a>", url.Replace(urlFormat, cpage.ToString()), pageNumClass, pageTarget, cpage.ToString()); } if (totalPage > pageCount) { if (!string.IsNullOrEmpty(pageBreakText)) { sb.AppendFormat("<span class=\"{0}\">{1}</span>", pageBreakClass, pageBreakText);//页码省略号... } } sb.AppendFormat("<a class=\"{0}\" href=\"{1}\" target=\"{2}\">{3}</a>", pageTextClass, url.Replace(urlFormat, (currentPage + 1).ToString()), pageTarget, nextPageText);//下一页 } else if (currentPage == totalPage) { //当前页是尾页的情况 sb.AppendFormat("<a class=\"{0}\" href=\"{1}\" target=\"{2}\">{3}</a>", pageTextClass, url.Replace(urlFormat, (currentPage - 1).ToString()), pageTarget, prevPageText);//上一页 int startI = currentPage - pageCount;//往后移一位,因为多减去了他本身 startI = (startI <= 0) ? 1 : startI;//如果减多了,小于0了,就给他默认1 if (startI > 1) { startI += 1; if (!string.IsNullOrEmpty(pageBreakText)) { sb.AppendFormat("<span class=\"{0}\">{1}</span>", pageBreakClass, pageBreakText);//页码省略号... } } for (int i = startI; i < totalPage; i++) { string cpage = i.ToString(); sb.AppendFormat("<a href=\"{0}\" class=\"{1}\" target=\"{2}\">{3}</a>", url.Replace(urlFormat, cpage.ToString()), pageNumClass, pageTarget, cpage.ToString()); } sb.AppendFormat("<span class=\"{0} {1}\">{2}</span>", pageNumClass, pageCurClass, totalPage); sb.AppendFormat("<span class=\"{0} {1}\">{2}</span>", pageTextClass, pageCurClass, nextPageText); } else { int leftCount = 0; int rightCount = 0; //是中间页的情况 pageCount = pageCount - 1;//要排除那个页码的自身 if (pageCount % 2 == 0)//看下是否可以对半分 { //显示页码总数是偶数的情况,对半分 leftCount = pageCount / 2; rightCount = pageCount / 2; } else { //显示页码总数是奇数的情况 double d_l = Convert.ToDouble(pageCount / 2.0); leftCount = Convert.ToInt32(Math.Floor(d_l));//左边少,那就用Floor,反之就用Ceiling rightCount = Convert.ToInt32(Math.Ceiling(d_l));//右边多,那就用Ceiling,反之就用Floor } if (rightCount > (totalPage - currentPage))//判断剩余的页码和右面要显示的页码哪个多,取小的那个 { int cha = totalPage - currentPage;//计算当前页距离尾页还有几页 leftCount += rightCount - cha;//如果右面不足,那就用左面的补充,rightcount-cha就是计算rightcount比这个相差页数多出几页 } int startI = currentPage - leftCount; startI = (startI <= 0) ? 1 : startI;//如果减多了,小于0了,就给他默认1 sb.AppendFormat("<a class=\"{0}\" href=\"{1}\" target=\"{2}\">{3}</a>", pageTextClass, url.Replace(urlFormat, (currentPage - 1).ToString()), pageTarget, prevPageText);//上一页 if (startI > 1) { if (!string.IsNullOrEmpty(pageBreakText)) { sb.AppendFormat("<span class=\"{0}\">{1}</span>", pageBreakClass, pageBreakText);//页码省略号... } } for (int i = startI; i < currentPage; i++) { string cpage = i.ToString(); sb.AppendFormat("<a href=\"{0}\" class=\"{1}\" target=\"{2}\">{3}</a>", url.Replace(urlFormat, cpage.ToString()), pageNumClass, pageTarget, cpage.ToString()); } sb.AppendFormat("<span class=\"{0} {1}\">{2}</span>", pageNumClass, pageCurClass, currentPage);//当前页 for (int i = currentPage + 1; i <= (currentPage +rightCount < totalPage ? currentPage+rightCount : totalPage); i++) { string cpage = i.ToString(); sb.AppendFormat("<a href=\"{0}\" class=\"{1}\" target=\"{2}\">{3}</a>", url.Replace(urlFormat, cpage.ToString()), pageNumClass, pageTarget, cpage.ToString()); } if (currentPage + rightCount < totalPage) { if (!string.IsNullOrEmpty(pageBreakText)) { sb.AppendFormat("<span class=\"{0}\">{1}</span>", pageBreakClass, pageBreakText);//就那个页数的... } } sb.AppendFormat("<a class=\"{0}\" href=\"{1}\" target=\"{2}\">{3}</a>", pageTextClass, url.Replace(urlFormat, (currentPage + 1).ToString()), pageTarget, nextPageText);//下一页 } } else { //总页数等于1 sb.AppendFormat("<span class=\"{0} {1}\">{2}</span>", pageTextClass, pageCurClass, prevPageText); sb.AppendFormat("<span class=\"{0} {1}\">1</span>", pageNumClass, pageCurClass); sb.AppendFormat("<span class=\"{0} {1}\">{2}</span>", pageTextClass, pageCurClass, nextPageText); } string res = sb.ToString(); return res; }
调用:
string url = "https://www.yangguangdream.com/?page={{page}}"; int page = 5; int totalPage = 180; string pageBarHtml = getPageBarHtml(page, totalPage, 6, url, "{{page}}", "pagebreak pagecur", "pageText", "pageNum", "pagecur", "_self", "上一页", "下一页", "...");
输出(经过在线工具手动格式化,实际出来是没有换行格式的):
<a class="pageText" href="https://www.yangguangdream.com/?page=4" target="_self">上一页</a> <span class="pagebreak pagecur">...</span> <a href="https://www.yangguangdream.com/?page=3" class="pageNum" target="_self">3</a> <a href="https://www.yangguangdream.com/?page=4" class="pageNum" target="_self">4</a> <span class="pageNum pagecur">5</span> <a href="https://www.yangguangdream.com/?page=6" class="pageNum" target="_self">6</a> <a href="https://www.yangguangdream.com/?page=7" class="pageNum" target="_self">7</a> <a href="https://www.yangguangdream.com/?page=8" class="pageNum" target="_self">8</a> <span class="pagebreak pagecur">...</span> <a class="pageText" href="https://www.yangguangdream.com/?page=6" target="_self">下一页</a>
微信扫码查看本文
发表评论