在做web开发时,经常会用到查询列表,而查询列表中一般都会需要用到分页。
本文就从0开始做一个分页控件。
首先说需要用到的工具:
第一, html,这个主要是用于页面显示的一些分页按钮的显示。
第二, css,这个是控制页面上的按钮的样式
第三, javascript,这个不做什么解释
第四, angularjs,既然大家都说好,那就试试吧。
好了,现在就开始吧!
第一章HTML写起来
先规划分页控件的样子,嗯,首先找个参照物。

如图,页面分为三个区域。
|
区域编号 |
功能 |
备注 |
|
1 |
记录条数 |
最左侧的“共x条” |
|
2 |
翻页控制 |
包含“首页,上页,1,2,3,4,5,下页,尾页” |
|
3 |
当前页 |
右侧2个“第x页,共x页” |
用什么html的元素呢?
首选<ul><li>。
<ul>
<li>共x条</li>
<li>首页</li>
<li>上页</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>下页</li>
<li>尾页</li>
<li>第x页</li>
<li>共x页</li>
</ul>
写完之后,运行起来看看吧。

哦,我不得不说,完美!我们的工作已经完成了大半。
你说什么?看起来有点奇怪?哦,没关系,先做功能,最后调样式。此时我们需要分析一下上面三个区域的内容,要怎么控制。
|
区域编号 |
功能 |
备注 |
|
1 |
记录条数 |
需要知道,总共有多少条数据 |
|
2 |
翻页控制 |
这里,首页,上页,下页,尾页四个项,都是一直显示的;但是中间的“1,2,3,4,5”我们称其为“数字页”,它的规则,要根据具体的页数来决定。 经过我多方的调差研究,综合计算考虑,精心规划了数十年,最终定下来了宇宙无敌最强的规则:数字页,去掉!
|
|
3 |
当前页 |
需要知道当前的页码,以及总共分多少页 |
经过上面的分析,我们重新整理一下页面
<ul>
<li>共x条</li>
<li>首页</li>
<li>上页</li>
<li>下页</li>
<li>尾页</li>
<li>第x页</li>
<li>共x页</li>
</ul>

恩,又进了一大步,这时候,为了庆祝即将到来的胜利,我们先休息一下。
请大家注意做做上肢的运动,尤其是颈椎,肩膀,手腕等部位。工作一段时间,就最伸伸胳膊,活动活动脖子。夏天到了,多喝点水,防止上火。
做完了运动,我们继续。您是不是精神多了呢?
第二章使用angularjs绑定
在页面中引入angularjs文件
<!DOCTYPE html>
<html lang="en" ng-app="pageapp">
<head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" href="css/css.css">
<script type="text/javascript" src="js/jquery-1.12.3.min.js"></script>
<script type="text/javascript" src="js/angular.min.js"></script>
<script type="text/javascript" src="js/page.js"></script>
</head>
<body ng-controller="pageController">
<table class="tb">
<tr>
<th>
name
</th>
</tr>
<tr ng-repeat="book in books">
<td>
{{book.name}}
</td>
</tr>
</table>
<ul>
<li>共<span class="tc">{{totalcount}}</span>条</li>
<li ng-click="firstpage()" class="bt">首页</li>
<li ng-click="prepage()" class="bt">上页</li>
<li ng-click="nextpage()" class="bt">下页</li>
<li ng-click="lastpage()" class="bt">尾页</li>
<li>第{{pageindex}}页</li>
<li>共{{pagecount}}页</li>
</ul>
</body>
</html>
Html的页面,像这样。
绑定 ng-app
绑定 ng-controller
绑定 ng-click四个按钮
而在page.js文件中,写的是初始的绑定设置。
这样,我们点击按钮的时候,区域3中的“第x页”就会显示对应的页码。
至此我们的翻页控件就基本完成了。
var app = angular.module('pageapp', []);
var books = [{ name: "1" }, { name: "2" }, { name: "3" }, { name: "4" }, { name: "5" },
{ name: "6" }, { name: "7" }, { name: "8" }, { name: "9" }, { name: "10"}];
var pagesize = 2;
app.controller('pageController', function ($scope, $http) {
$scope.totalcount = books.length; //区域1,总记录数
$scope.pageindex = 1; //设置当前的页码
$scope.books = books.slice(($scope.pageindex - 1) * pagesize, $scope.pageindex * pagesize);
$scope.pagecount = books.length / pagesize;
if (books.count % pagesize > 0) {
$scope.pagecount = $scope.pagecount + 1; //计算总共多少页
}
$scope.firstpage = function () {
$scope.pageindex = 1;
$scope.books = books.slice(($scope.pageindex - 1) * pagesize, $scope.pageindex * pagesize);
}
$scope.prepage = function () {
if ($scope.pageindex > 1) {
$scope.pageindex = $scope.pageindex - 1;
}
else {
$scope.pageindex = 1;
}
$scope.books = books.slice(($scope.pageindex - 1) * pagesize, $scope.pageindex * pagesize);
}
$scope.nextpage = function () {
if ($scope.pageindex < $scope.pagecount) {
$scope.pageindex = $scope.pageindex + 1;
}
else {
$scope.pageindex = $scope.pagecount;
}
$scope.books = books.slice(($scope.pageindex - 1) * pagesize, $scope.pageindex * pagesize);
}
$scope.lastpage = function () {
$scope.pageindex = $scope.pagecount;
$scope.books = books.slice(($scope.pageindex - 1) * pagesize, $scope.pageindex * pagesize);
}
});
现在测试一下数据的显示。
我们将页面中增加一个ng-repeat绑定的表格
<table class="tb">
<tr>
<th>
name
</th>
</tr>
<tr ng-repeat="book in books">
<td>
{{book.name}}
</td>
</tr>
</table>
这时页面上的效果如图

当我们点击下页,表格中的内容应该会变为“3”和“4”两行内容。
至此我们的翻页控件的功能就算完成了。
“等等,你开始的时候不是说要参照的是这样的东西吗?”

“现在也差的太远了吧,山寨也得有点职业道德吧”。
好吧,为了满足某些同学的怪癖,就随便调一下页面样式吧。
body {
}
ul {
}
.tc {
color: red;
}
.tb {
border: solid 1px #919191;
width: 249px;
border-collapse: collapse;
}
.tb tr td {
border: solid 1px #919191;
border-collapse: collapse;
}
ul li {
list-style: none;
float: left;
padding-left: 5px;
padding-right: 5px;
border: solid 1px #919191;
min-width: 50px;
min-height: 30px;
text-align: center;
line-height: 30px;
font-size: 12px;
color: #0eb4bf;
background-color: #e6e6e6;
}
.bt {
cursor: pointer;
}
.bt:hover {
cursor: pointer;
color: red;
}
等灯,等灯!最终的页面效果是:

这下,大家满意了吧。当然,我们这种实现,是做了一些“优化”了的,在此基础上,可以加上原来想要的“数字页码”,这留给大家自行探索吧,网上也有很多计算规则。我这里就不写喽。
好的,收工。晚上得吃点好的,补补脑。
浙公网安备 33010602011771号