怎样用JS实现网站分页,要最简单的?

JavaScript016

怎样用JS实现网站分页,要最简单的?,第1张

不多说,以下是代码

<script language="javascript">

var total=172//总条目: 可变

var show=20//每页显示条目数: 可变

total%show==0?page=total/show:page=Math.ceil(total/show)//计算总页数

//取得当前页序号 - idx

idx=window.location.search//这里得到 ?0 字样

if(idx=="") idx="?0"//初始可能没有URL的尾部参数

mylen=idx.length-1

idx=idx.substr(1,mylen)

var title=new Array()//测试用文章标题数组 title (赋值)

for(i=0i<totali++) {

k=i+1

title[i]="文章标题 " + k + "<br>"

}

function echostr(pg) { //函数: 打印各页内容

var mystr=""

for(i=0i<showi++) {

myidx=pg*show+i

if(title[myidx]) mystr+=title[myidx] //只显示存在的内容

}

document.write(mystr)

}

//显示相关资料 - 测试用

document.write('总条目: ' + total + '┊每页显示数: ' + show + '┊需要页数: ' + page + '┊当前页码序号(idx): ' + idx + '<br><br>')

echostr(idx)//显示页面内容

function pg_link(all){ //函数: 打印页码链接

linkstr="<br>第 "

for(i=0i<alli++) {

j=i+1

i!=idx ? linkstr+="<a href='jspage.htm?" + i + "'>" + j + "</a>":linkstr+=j + " "

}

linkstr+="页"

document.write(linkstr + "<br><br>")

}

pg_link(page)//显示页码链接

</script>

分页一般和表格一起用,分页链接作为表格的一部分,将分页链接封装成一个独立的组件,然后作为子组件嵌入到表格组件中,这样比较合理。

效果:

代码:

1.注册一个组件

js

Vue.component('pagination',{

template:'#paginationTpl',

replace:true,

props:['cur','all','pageNum'],

methods:{

//页码点击事件

btnClick:

function(index){

if(index

!=

this.cur){

this.cur

=

index

}

}

},

watch:{

"cur"

:

function(val,oldVal)

{

this.$dispatch('page-to',

val)

}

},

computed:{

indexes

:

function(){

var

list

=

[]

//计算左右页码

var

mid

=

parseInt(this.pageNum

/

2)//中间值

var

left

=

Math.max(this.cur

-

mid,1)

var

right

=

Math.max(this.cur

+

this.pageNum

-

mid

-1,this.pageNum)

if

(right

>

this.all

)

{

right

=

this.all}

while

(left

<=

right){

list.push(left)

left

++

}

return

list

},

showLast:

function(){

return

this.cur

!=

this.all

},

showFirst:

function(){

return

this.cur

!=

1

}

}

})

模板:

<script

type="text/template"

id="paginationTpl">

<nav

v-if="all

>

1">

<ul

class="pagination">

<li

v-if="showFirst"><a

href="javascript:"

@click="cur--">«</a></li>

<li

v-for="index

in

indexes"

:class="{

'active':

cur

==

index}">

<a

@click="btnClick(index)"

href="javascript:">{{

index

}}</a>

</li>

<li

v-if="showLast"><a

@click="cur++"

href="javascript:">»</a></li>

<li><a>共<i>{{all}}</i>页</a></li>

</ul>

</nav>

</script>

HTML:

<div

id='item_list'>

...

<pagination

:cur="1"

:all="pageAll"

:page-num="10"

@page-to="loadList"></pagination>

</div>

当点击分页链接的时候,通过watch

cur,子组件分发

page-to

事件,通过

@page-to="loadList"

标签指定使用父组件

loadList

方法处理事件,父组件接收到page值然后ajax加载数据,根据服务端返回计算并更新自身的

pageAll

值,因为子组件prop通过

:all="pageAll"

动态绑定了父组件的pageAll对象,所以子组件会联动更新。

附上一个简单的表格组件例子:

var

vm

=

new

Vue({

el:

"#item_list",

data:

{

items

:

[],

//分页参数

pageAll:0,

//总页数,根据服务端返回total值计算

perPage:10

//每页数量

},

methods:

{

loadList:function(page){

var

that

=

this

$.ajax({

url

:

"/getList",

type:"post",

data:{"page":page,"perPage":this.perPage},

dataType:"json",

error:function(){alert('请求列表失败')},

success:function(res){

if

(res.status

==

1)

{

that.items

=

res.data.list

that.perPage

=

res.data.perPage

that.pageAll

=

Math.ceil(res.data.total

/

that.perPage)//计算总页数

}

}

})

},

//初始化

init:function(){

this.loadList(1)

}

}

})

vm.init()

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!