首页 > 其他分享 >jquery(js)实现上滑加载更多内容(分页查询)

jquery(js)实现上滑加载更多内容(分页查询)

时间:2022-11-07 18:00:23浏览次数:56  
标签:jquery function js flag var scrollTop page 加载


移动端上滑加载更多步骤

移动端实现滚动上滑加载更多内容分为以下几步:

步骤1 禁用系统滚动条

使用CSS样式禁用移动端的滚动条,代码如下所示:

html,body{
width:100%;
overflow:hidden;
}

步骤2 主体内容区域充满视口

需要添加滚动事件的元素必须拥有固定高度,并设置该元素y轴可以滚动,主体内容在该具有固定高度的元素中滚动。具体样式代码如下:

overflow-x: hidden;
overflow-y: scroll;

如果该元素的高度需要撑满整个视口,则可以将高度设为100%,继承html、body的高度。

height: 100%;

移动端上滑加载更多实例

移动端实例css代码,注意禁用系统滚动条,添加滚动事件元素设置高度,开启滚动,html代码、js代码如下
html代码:

<!-- 全部 -->
<div class="pal1" id="box">
<div class="cardbox" id="conlist">
<div class="card bgwhite shadow pore">
<div class="more">
<span class="iconfont icon-xiala1"></span>
<span class="iconfont icon-shangla none"></span>
</div>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
</ul>
</div>
</div>
<div class="bomtips">
<div class="imgbox tc gray none" id="load">
<img src="../image/loading.gif" alt="">加载中…
</div>
<div class="gray tc none" id="ok">没有更多了…</div>
</div>
</div>

js代码:

// 滚动下滑展示更多
function scrollmore(box,conlist,load,ok){
var page = 1; // 页码
var flag = true; // flag 用于防止滚动中(内容还未加载完毕)加载多次

var scrollHeight = $(box)[0].scrollHeight; // 整个内容高度
var clientHeight = $(this).height(); // 可视区域高度
// 数据没有更多的时候显示没有更多了
if(scrollHeight<=clientHeight){
$(ok).show();
}
// jquery实现
$(box).scroll(function(){
var scrollTop = $(this).scrollTop(); // 滚动条距离顶部的高度
var scrollHeight =$(this)[0].scrollHeight; // 整个内容高度
var clientHeight = $(this).height(); // 可视区域高度
// console.log(scrollTop,scrollHeight,clientHeight)
// 滚到底部了
if (scrollTop + clientHeight >= scrollHeight) {
// $(ok).hide();
$(load).show();
// 判断结束
// 当前页面显示的数据条数>=总共的数据条数
// 此时,显示没有更多了
// 当前页面显示条数:$('.cardbox')[0].children.length
if(page==3){
$(load).hide();
$(ok).show();
return
}
if (flag) {
// 触发后
flag = false
// 模拟ajax请求
var timer=setTimeout(function () {
page++;
loadMore(page)
}, 1000)
}
}
})
// 加载更多
function loadMore(page) {
var dom = '';
for (var i = 0; i < 20; i++) {
dom += `
<section>后面加载${page}的${i}</section>
`
}
$(conlist).append($(dom))
$(load).hide();
// dom渲染完毕后重新开启flag
flag = true;
}
}
scrollmore('#box','#conlist','#load','#ok')

模仿 ajax请求数据

(待尝试)

<script type="text/javascript">
function bottomScrollLoading(contentObj, loadingObj, url) {
var loading = false;

$(window).scroll(function (){
if (loading)
{
return; // 已经在加载中了,再拖也没有用
}

var scrollTop = $(window).scrollTop();
var clientHeight = $(window).height();
// var clientHeight = document.body.clientHeight; // 如果没有为网页指定 DOCTYPE,则用这句代替上一句
if (scrollTop + clientHeight < $(document).height()){
return; // 还没有拖到底
}

loading = true;
$(loadingObj).show(); // 显示“加载中”
$(window).scrollTop(scrollTop + $(loadingObj).height()); // 继续滚动,让“加载中”显示完整
// ajax 读取
$.ajax({
url: url,
success: function (data){
// setTimeout(function (){
$(contentObj).append(data);
// }, 5000); // 为了效果明显,作了延迟,调试用。
},
complete : function (){
// setTimeout(function (){
$(loadingObj).hide();
$(window).scrollTop(scrollTop); // 由于前面为了显示“加载中”让网页下滚了,这里要复原,否则如果遇到加载的内容高度 < “加载中”高度,就会导致又触发滚动加载。
loading = false;
// }, 5000); // 为了效果明显,作了延迟,调试用。
}
});
});
}


$(window).ready(function (){
bottomScrollLoading("#list", "#bottomLoading", "data.htm");
});
</script>

PC端上滑加载更多实例

html文件:

<!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>scroll的局部实现</title>
<style>
* {
margin: 0px;
padding: 0px;
}

#box {
width: 500px;
height: 400px;
border: 1px solid #666;
margin: 100px auto;
overflow-x: hidden;
overflow-y: scroll;
position: relative;
}

section {
height: 40px;
line-height: 40px;
text-align: center;

}

#load {
display: none;
}
</style>
</head>

<body>
<div id="box">
<div class="conlist" id="conlist">
<section>1</section>
<section>2</section>
<section>3</section>
<section>4</section>
<section>5</section>
<section>6</section>
<section>7</section>
<section>8</section>
<section>9</section>
<section>10</section>
<section>11</section>
<section>12</section>
<section>13</section>
<section>14</section>
<section>15</section>
<section>16</section>
<section>17</section>
<section>18</section>
<section>19</section>
<section>20</section>
</div>
<img src="./loading.gif" alt="" id="load">
</div>

</body>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>
var page = 1; // 页码
var flag = true; // flag 用于防止滚动中(内容还未加载完毕)加载多次
// jquery实现
$('#box').scroll(function(){
var scrollTop = $(this).scrollTop(); // 滚动条距离顶部的高度
var scrollHeight =$(this)[0].scrollHeight; // 整个内容高度
var clientHeight = $(this).height(); // 可视区域高度
console.log(scrollTop,scrollHeight,clientHeight)
if (scrollTop + clientHeight >= scrollHeight) {
console.log(scrollHeight)
$('#load').show();
if (flag) {
// 触发后
flag = false
// 模拟ajax请求
setTimeout(function () {
page++;
loadMore(page)
}, 2000)
}
}
})

// 元素实现
// document.getElementById('box').onscroll = function () {
// // 获取三个参数
// var sTop = document.getElementById('box').scrollTop;
// var sHeight = document.getElementById('box').scrollHeight;
// var clientHeig = document.getElementById('box').clientHeight;
// if (sTop + clientHeig >= sHeight) {
// console.log(sHeight)
// $('#load').show();
// if (flag) {
// flag = false
// setTimeout(function () {
// page++;
// loadMore(page)
// }, 2000)
// }
// }
// }


// 加载更多
function loadMore(page) {
var dom = '';
for (var i = 0; i < 20; i++) {
dom += `
<section>后面加载${page}的${i}</section>
`
}
$('#conlist').append($(dom))
$('#load').hide();
// dom渲染完毕后重新开启flag
flag = true;
}
</script>

</html>

加载中的gif图片:

jquery(js)实现上滑加载更多内容(分页查询)_html


标签:jquery,function,js,flag,var,scrollTop,page,加载
From: https://blog.51cto.com/u_15867142/5830361

相关文章

  • JS中的prototype、__proto__与constructor
    1.前言作为一名前端工程师,必须搞懂JS中的prototype、proto与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关......
  • 格式校验js
    letutil={};//将json格式转成echartdata格式util.jsonToList=functionjsonToList(json){if(json){returnObject.keys(json).map(key=>{......
  • Selenium + Jsoup 抓取豆瓣演员图片
    依赖<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.13.1</version></d......
  • 细说Js中的this
    为什么使用this先看个例子:functionidentity(){returnthis.name.toUpperCase();}functionspeak(){return"Hello,i'm"+identity.call(this);}va......
  • js中filter过滤用法总结
    定义和用法filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。注意: filter()不会对空数组进行检测。注意: filter()不会改变原......
  • json格式的数组去重
    vararr=[{key:'01',value:'乐乐'},{key:'02',value:'博博'},{key:'03',value:'淘淘'},{key:'......
  • NodeJs断点调试详细说明
    node在运行js的时候,可以传递参数让其运行在调试模式,运行在调试模式后,引擎会向某个端口发送调试相关信息。一、在devTools中调试1.在chrome中接收调试信息在浏览器上打开:ch......
  • 细说nodejs的path模块
    前言path模块是nodejs中用于处理文件/目录路径的一个内置模块,可以看作是一个工具箱,提供诸多方法供我们使用,当然都是和路径处理有关的。同时在前端开发中path模块出现......
  • 用 nodejs 搭建脚手架
    1前言1.1像我们熟悉的vue-cli,taro-cli等脚手架,只需要输入简单的命令taroinitproject,即可快速帮我们生成一个初始项目。在日常开发中,有一个脚手架工具可以用来提高......
  • 理解Nodejs中的进程间通信
    前置知识文件描述符在Linux系统中,一切都看成文件,当进程打开现有文件时,会返回一个文件描述符。文件描述符是操作系统为了管理已经被进程打开的文件所创建的索引,用来指......