关于一个分页功能,没有思路了,想请教。

phoenix-sky 社区高级成员 T9 2021-05-23 09:27:47
参考网上代码实现一个基本的分页功能,没有完全实现,没有更好的思路了,在这里请教大家。
1:目前显示所有页数,应该一次只显示[1,2,3,4,5] [6,7,8,9,10] [11,12,13,14,15] 这样的分页;
2:JS 哪些部分该改进?

谢谢!
下面是全部代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Go Coding!</title>
<style>
* {
margin: 0;
padding: 0;
border: none;
list-style: none;
text-decoration: none;
font-size: 12px;
}

body {
padding: 20px;
}

.title {
font-size: 16px;
color: #f80;
}

.list>li {
padding: 6px;
border-bottom: 1px solid #eee;
}

.pagination {
padding: 4px;
}

.pagination a {
display: inline-block;
padding: 4px;
margin: 0 4px 0 0;
color: #00c;
}
</style>
</head>
<body>
<ul class="list"></ul>
<section class="pagination"></section>
<script>
let data = {
"list": [
{ "id": 1, "title": 2001 },
{ "id": 2, "title": 2002 },
{ "id": 3, "title": 2003 },
{ "id": 4, "title": 2004 },
{ "id": 5, "title": 2005 },
{ "id": 6, "title": 2006 },
{ "id": 7, "title": 2007 },
{ "id": 8, "title": 2008 },
{ "id": 9, "title": 2009 },
{ "id": 10, "title": 2010 },
{ "id": 11, "title": 2011 },
{ "id": 12, "title": 2012 },
{ "id": 13, "title": 2013 },
{ "id": 14, "title": 2014 },
{ "id": 15, "title": 2015 },
{ "id": 16, "title": 2016 },
]
}

let list = data.list;
console.log(`list-length: ${list.length}`);

pagination({
"current-page": 1,
"page-size": 5,
});

function pagination(par) {
let listBox = document.querySelector(".list");
let num = data.list.length;
let totalPage = 0;
let pageSize = par["page-size"];
let currentPage = par["current-page"];

if (num / pageSize > parseInt(num / pageSize)) {
totalPage = parseInt(num / pageSize) + 1;
} else {
totalPage = parseInt(num / pageSize);
}

let sliceStart = (currentPage - 1) * pageSize;
let sliceEnd = currentPage * pageSize;
sliceEnd = sliceEnd > num ? num : sliceEnd;

let dataSlice = data.list.slice(sliceStart, sliceEnd);
let listText = "";
for (let item of dataSlice) {
listText += `
<li><h5 class="title">${item.id} - ${item.title}</h5></li>
`;
}
listBox.innerHTML = listText;

let htmlText = "";
if (currentPage > 1) {
htmlText += `
<a href="#" onClick="pagination({'current-page': ${currentPage - 1}, 'page-size': ${pageSize}})">
上一页
</a>
`;
}

for (let i = 1; i < totalPage + 1; i++) {
htmlText += `
<a href="#" onClick="pagination({'current-page': ${i}, 'page-size': ${pageSize}})">
${i}
</a>
`;
}

if (currentPage < totalPage) {
htmlText += `
<a href="#" onClick="pagination({'current-page': ${currentPage + 1}, 'page-size': ${pageSize}})">
下一页
</a>
`;
}

let pagination = document.querySelector(".pagination");
pagination.innerHTML = htmlText;
}
</script>
</body>
</html>
...全文
22332 13 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
呆马蓝 2021-10-07

https://blog.csdn.net/kkLeung/article/details/104701681
N年前的笔记,后端python django +前端的分页。
定义分页的类,可以查考!!

  • 打赏
  • 举报
回复
xiaoxiangqing 2021-05-26
数据只能通过服务器分页去获取吧
  • 打赏
  • 举报
回复
phoenix-sky 社区高级成员 T9 2021-05-26
引用 11 楼 xiaoxiangqing 的回复:
数据只能通过服务器分页去获取吧
为了测试分页功能,模拟的。
  • 打赏
  • 举报
回复
phoenix-sky 社区高级成员 T9 2021-05-25
引用 8 楼 gqkmiss 的回复:
[quote=引用 7 楼 phoenix.sky 的回复:][quote=引用 5 楼 gqkmiss 的回复:]1、当前页码数高亮 2、可以选择一页多少个 3、当页码数超过一定量时怎么显示(100页、200页这种) 4、可以跳转某一页 5、只有一页时隐藏分页功能
您好, 3、当页码数超过一定量时怎么显示(100页、200页这种) 该如何修改代码? 谢谢![/quote] 思路:比如100页的时候,展示1、2、3 ... 98、99、100;按照这种情况展示。[/quote]代码如何实现?谢谢!
  • 打赏
  • 举报
回复
gqkmiss 2021-05-25
引用 7 楼 phoenix.sky 的回复:
[quote=引用 5 楼 gqkmiss 的回复:]1、当前页码数高亮 2、可以选择一页多少个 3、当页码数超过一定量时怎么显示(100页、200页这种) 4、可以跳转某一页 5、只有一页时隐藏分页功能
您好, 3、当页码数超过一定量时怎么显示(100页、200页这种) 该如何修改代码? 谢谢![/quote] 思路:比如100页的时候,展示1、2、3 ... 98、99、100;按照这种情况展示。
  • 打赏
  • 举报
回复
phoenix-sky 社区高级成员 T9 2021-05-25
引用 5 楼 gqkmiss 的回复:
1、当前页码数高亮 2、可以选择一页多少个 3、当页码数超过一定量时怎么显示(100页、200页这种) 4、可以跳转某一页 5、只有一页时隐藏分页功能
您好, 3、当页码数超过一定量时怎么显示(100页、200页这种) 该如何修改代码? 谢谢!
  • 打赏
  • 举报
回复
泡泡鱼_ 2021-05-25
引用 4 楼 phoenix.sky 的回复:
[quote=引用 1 楼 泡泡鱼_ 的回复:]你少了一个参数:默认显示几个页码,比如是nums,默认5。然后for生成页码时根据这个当前页码和这个参数nums去生成。然后注意页码的边界修正
您好, 我修改了代码,但是分页功能出现错误。这段代码该如何修改? 谢谢!
for (let i = 1; i < totalPage + 1; i++) {
  htmlText += `
    <a class="item-link" href="#" onClick="pagination({'current-page': ${i}, 'page-size': ${pageSize}})">
      ${i} 
    </a>
  `;
}
[/quote] 就是计算呀,得出for中i的范围呀……大概下面这样子的意思吧

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Go Coding!</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        border: none;
        list-style: none;
        text-decoration: none;
        font-size: 12px;
      }

      body {
        padding: 20px;
      }

      .title {
        font-size: 16px;
        color: #f80;
      }

      .list > li {
        padding: 6px;
        border-bottom: 1px solid #eee;
      }

      .pagination {
        padding: 4px;
      }

      .pagination a {
        display: inline-block;
        padding: 4px;
        margin: 0 4px 0 0;
        color: #00c;
      }
      .pagination a.curr {
        display: inline-block;
        padding: 4px;
        margin: 0 4px 0 0;
        background-color: #000;
        color: #fff;
      }
    </style>
  </head>
  <body>
    <ul class="list"></ul>
    <section class="pagination"></section>
    <script>
      let data = {
        list: [
          { id: 1, title: 2001 },
          { id: 2, title: 2002 },
          { id: 3, title: 2003 },
          { id: 4, title: 2004 },
          { id: 5, title: 2005 },
          { id: 6, title: 2006 },
          { id: 7, title: 2007 },
          { id: 8, title: 2008 },
          { id: 9, title: 2009 },
          { id: 10, title: 2010 },
          { id: 11, title: 2011 },
          { id: 12, title: 2012 },
          { id: 13, title: 2013 },
          { id: 14, title: 2014 },
          { id: 15, title: 2015 },
          { id: 16, title: 2016 },
          { id: 1, title: 2001 },
          { id: 2, title: 2002 },
          { id: 3, title: 2003 },
          { id: 4, title: 2004 },
          { id: 5, title: 2005 },
          { id: 6, title: 2006 },
          { id: 7, title: 2007 },
          { id: 8, title: 2008 },
          { id: 9, title: 2009 },
          { id: 10, title: 2010 },
          { id: 11, title: 2011 },
          { id: 12, title: 2012 },
          { id: 13, title: 2013 },
          { id: 14, title: 2014 },
          { id: 15, title: 2015 },
          { id: 16, title: 2016 },
        ],
      }

      let list = data.list
      console.log(`list-length: ${list.length}`)

      pagination({
        current: 1,
        size: 5,
        nums: 5,
      })

      function pagination(config) {
        let listBox = document.querySelector(".list")
        let num = data.list.length
        let totalPage = 0
        let pageSize = config.size
        let currentPage = config.current
        let nums = config.nums || 5
        if (num / pageSize > parseInt(num / pageSize)) {
          totalPage = parseInt(num / pageSize) + 1
        } else {
          totalPage = parseInt(num / pageSize)
        }

        let sliceStart = (currentPage - 1) * pageSize
        let sliceEnd = currentPage * pageSize
        sliceEnd = sliceEnd > num ? num : sliceEnd

        let dataSlice = data.list.slice(sliceStart, sliceEnd)
        let listText = ""
        for (let item of dataSlice) {
          listText += `
          <li><h5 class="title">${item.id} - ${item.title}</h5></li>
        `
        }
        listBox.innerHTML = listText

        let htmlText = ""
        if (currentPage > 1) {
          htmlText += `
          <a href="#" onClick="pagination({current: ${
            currentPage - 1
          }, size: ${pageSize},nums:${nums}})">
            上一页
          </a>
        `
        }

        let start = currentPage - Math.floor(nums / 2)
        let end = currentPage + Math.floor(nums / 2)
        //保证有nums个页码在显示
        end < nums && (end = nums)
        //最大页码修正
        end > totalPage && (end = totalPage)
        //保证有nums个页码在显示
        end - start != nums - 1 && (start = end - nums + 1)
        //最小页码修正
        start < 1 && (start = 1)

        for (let i = start; i <= end; i++) {
          htmlText += `
          <a href="#" ${
            i === currentPage ? 'class="curr"' : ""
          } onClick="pagination({current: ${i}, size: ${pageSize},nums:${nums}})">
            ${i} 
          </a>
        `
        }

        if (currentPage < totalPage) {
          htmlText += `
          <a href="#" onClick="pagination({current: ${
            currentPage + 1
          }, size: ${pageSize},nums:${nums}})">
            下一页
          </a>
        `
        }

        let pagination = document.querySelector(".pagination")
        pagination.innerHTML = htmlText
      }
    </script>
  </body>
</html>

  • 打赏
  • 举报
回复
gqkmiss 2021-05-25
1、当前页码数高亮 2、可以选择一页多少个 3、当页码数超过一定量时怎么显示(100页、200页这种) 4、可以跳转某一页 5、只有一页时隐藏分页功能
  • 打赏
  • 举报
回复
phoenix-sky 社区高级成员 T9 2021-05-25
引用 1 楼 泡泡鱼_ 的回复:
你少了一个参数:默认显示几个页码,比如是nums,默认5。然后for生成页码时根据这个当前页码和这个参数nums去生成。然后注意页码的边界修正
您好, 我修改了代码,但是分页功能出现错误。这段代码该如何修改? 谢谢!
for (let i = 1; i < totalPage + 1; i++) {
  htmlText += `
    <a class="item-link" href="#" onClick="pagination({'current-page': ${i}, 'page-size': ${pageSize}})">
      ${i} 
    </a>
  `;
}
  • 打赏
  • 举报
回复
xiaosouyi 2021-05-25
感觉像看天书
  • 打赏
  • 举报
回复
phoenix-sky 社区高级成员 T9 2021-05-24
引用 2 楼 泡泡鱼_ 的回复:
而且一般翻页也不是像你说的那个每五个一组的显示的。大多是保证当前页在页码列表的中间
明白,我先修改代码,谢谢!
  • 打赏
  • 举报
回复
泡泡鱼_ 2021-05-24
而且一般翻页也不是像你说的那个每五个一组的显示的。大多是保证当前页在页码列表的中间
  • 打赏
  • 举报
回复
泡泡鱼_ 2021-05-24
你少了一个参数:默认显示几个页码,比如是nums,默认5。然后for生成页码时根据这个当前页码和这个参数nums去生成。然后注意页码的边界修正
  • 打赏
  • 举报
回复
相关推荐
无标题文档
常用的JS后台导航菜单,可刷新不变 <html xml:lang="UTF-8" lang="UTF-8"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Language" content="UTF-8" /> <title>后台管理</title> <style type="text/css"> body {margin:0;text-align:center;color:#000;font:normal 12px Arial,Verdana,Tahoma;text-align:center;background:#C8D0D5;line-height:150%;} a:link,a:visited {color:#385065;text-decoration:none} a:hover {text-decoration:underline} #menu {width:150px;margin:0px 15px;padding:0px;text-align:left;list-style:none} #menu .item {margin:5px 0px;padding:0px;list-style:none} a.title:link, a.title:visited, a.title:hover {display:block;background:url(http://www.tblog.com.cn/attachments/month_0609/m20069110491.gif) no-repeat;color:#385065;font-weight:bold;padding:2px 0 0 22px;width:128px;line-height:23px;cursor:pointer;text-decoration:none} #menu .item ul {border:1px solid #9FACB7;margin:0;width:118px;padding:3px 0px 3px 30px;background:#fff;list-style:none;display:none} #menu .item ul li {display:block;} </style> [removed] // --- 获取ClassName document.getElementsByClassName = function(cl) { var retnode = []; var myclass = new RegExp('\\b'+cl+'\\b'); var elem = this.getElementsByTagName('*'); for (var j = 0; j < elem.length; j++) { var classes = elem[j].className; if (myclass.test(classes)) retnode.push(elem[j]); } return retnode; } // --- 隐藏所有 function HideAll() { var items = document.getElementsByClassName("optiton"); for (var j=0; j
  • 基本信息
  • 系统管理
  • 系统管理
  • </body> </html> 欢迎访问阿里西西网页特效代码站,js.alixixi.com
    发帖
    JavaScript
    加入

    8.6w+

    社区成员

    Web 开发 JavaScript
    社区管理员
    • JavaScript
    • 无·法
    申请成为版主
    帖子事件
    创建了帖子
    2021-05-23 09:27
    社区公告
    暂无公告