pagination.ejs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <link rel="stylesheet" href="/stylesheets/pagination.css">
  2. <%
  3. // 计算总页数
  4. const totalPages = Math.ceil(recordsFiltered / length);
  5. // 确定前后展示的页码范围
  6. const startPage = Math.max(1, page - 3); // 前面至少展示2个页码(包括当前页的前一页)
  7. const endPage = Math.min(totalPages, page + 5 - (page % 5 === 0 ? 0 : 1)); // 后面展示页码数根据当前页是否为5的倍数来调整,确保总展示数为5(前面)+1(后面)或6(无省略号时)
  8. const showEllipsis = totalPages > 6 && (startPage > 1 || endPage < totalPages); // 判断是否需要显示省略号
  9. %>
  10. <div class="pagination">
  11. <span style="font-size: 15px; font-family:sans-serif; margin-right: 20px;"><%= translate.total[lang] %> <%= recordsFiltered %> <%= translate.item[lang] %>, <%= length %><%= translate.item[lang] %>/<%= translate.page[lang] %></span>
  12. <ul>
  13. <% for (let i = startPage; i <= endPage; i++) { %>
  14. <li class="<%= i === page ? 'active' : '' %>"><a href="<%= uri %><%= uri.includes('?')? '&' : '?' %>page=<%= i %>&length=<%= length %>" class="<%= i === page ? 'active' : '' %>"> <%= i %> </a></li>
  15. <% } %>
  16. <% if (showEllipsis) { %>
  17. <li class="ellipsis">...</li>
  18. <% } %>
  19. <% if (endPage < totalPages) { %>
  20. <li><a href="<%= uri %>page=<%= totalPages %>&length=<%= length %>"><%= totalPages %></a></li>
  21. <% } %>
  22. </ul>
  23. <input type="number" id="pageInput" min="1" max="<%= totalPages %>">
  24. <button onclick="jumpToPage()"><%= translate.jumpTo[lang] %></button>
  25. </div>
  26. <script>
  27. function jumpToPage() {
  28. var pageInput = document.getElementById('pageInput');
  29. var page = parseInt(pageInput.value, 10);
  30. var totalPages = '<%= totalPages %>'; // 从EJS模板中获取的总页数
  31. if (!isNaN(page) && page > 0 && page <= totalPages) {
  32. window.location.href = `<%= uri %><%= uri.includes('?')? '&' : '?' %>page=${page}&length=<%= length %>`
  33. } else {
  34. alert('<%= translate.wrongPage[lang] %> :(1-<%= totalPages %>)');
  35. }
  36. }
  37. </script>