前端分页原理

这里讲解一下滚动分页的常用的两种方法:

方法一:

<script type="text/javascript">
var page = 2; //当前页的页码
var flagNoData = false; //false
var allpage = @Model.PageCount; //总页码,会从后台获取
function showAjax(currentIndex) {
$.ajax({
url: "@Url.Action("GetEmployeeData", "Home")",
type: "GET",
data: {"pageNum":currentIndex},
success: function (data) {
//要执行的内容
showContent(data);
if (currentIndex >= allpage) { //当前页码大于等于总页码
flagNoData = true;
};
page += 1; //页数加1
}
})
}
function scrollFn() {
//真实内容的高度
var pageHeight = Math.max(document.body.scrollHeight, document.body.offsetHeight);
//视窗的高度
var viewportHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0;
//隐藏的高度
var scrollHeight = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
if (flagNoData) { //数据全部加载完了
return;
} else if (pageHeight - viewportHeight - scrollHeight < 10) { //如果满足触发条件,执行
showAjax(page);
}
}
$(window).bind("scroll", scrollFn); //绑定滚动事件

function showContent(datacontent)
{
$("#contentDiv").append(datacontent);
}
</script>

方法二:

@section scripts{
<script type="text/javascript" src="~/Scripts/dropload.min.js"></script>
<script type="text/javascript">
$(function () {
var page = 1;
var pageSize = 10;

$(".content").dropload({
scrollArea: window,
loadDownFn: function (me) {
page++;
var result = '';
$.ajax({
url: "@Url.Action("GetEmployeeData", "Home")",
type: "GET",
data: { "pageNum": page },
success: function (data) {
var arrlen = data.length;
if (arrlen > 0) {
showContent(data);
me.resetload();
} else {
me.lock();
me.noData();
}
},
error: function (xhr, type) {
alert('Ajax error:' + xhr + type);
me.resetload();
}
})
}
})
});

function showContent(datacontent) {
$("#contentDiv").append(datacontent);
}
</script>
}

方法三: (Vue的分页)

<template>
<div class="group-container" v-infinite-scroll="getActiveByAxios" infinite-scroll-disabled="busy" infinite-scroll-distance="10">
</div>
<load-more tip="正在加载" v-if="showLoading"></load-more>
</template>

<script>
import Vue from 'vue'
import Axios from 'axios'
import { LoadMore } from 'vux'
import infiniteScroll from 'vue-infinite-scroll'

Vue.use(infiniteScroll);

export default{
data(){
return {
showLoading:true,
busy: false,
pageInfo:{
count:0,
pageIndex:1,
pageSize:5
},
}
},
methods:{
getActiveByAxios(){
if((that.pageInfo.pageIndex - 1) * that.pageInfo.pageSize > that.pageInfo.count){
that.busy = false;
that.showLoading = false;
return;
}
Axios.get('url',{
params:{
pageSize:that.pageInfo.pageSize,
pageNum:that.pageInfo.pageIndex
}
}).then(function (response) {
if (response.data.success){
let list = response.data.data.commentList;
that.comments = that.comments.concat(list);
that.pageInfo.count = response.data.data.page.count;
that.pageInfo.pageIndex += 1;
setTimeout(() => {
that.busy = false;
}, 10);
}
}).catch(function (error) {

})
}
}
}

</script>
---------------------
作者:马优晨
来源:CSDN
原文:https://blog.csdn.net/qq_24147051/article/details/82020560
版权声明:本文为博主原创文章,转载请附上博文链接!

posted @ 2019-06-04 17:28  八月安生  阅读(318)  评论(0编辑  收藏  举报