首页 > 其他分享 >jQuery入门(六)jQuery实现瀑布分页

jQuery入门(六)jQuery实现瀑布分页

时间:2024-09-01 20:26:56浏览次数:4  
标签:jQuery let 入门 滚动条 分页 内容 当前 请求 这里

一、瀑布流分页案例分析
1.1) 功能分析:
  鼠标下拉,加载分页数据(10条) ,如下图:

 

 

1.2) 如何确定当前显示的数据已经浏览完毕?
公式:(滚动条距底部的距离 + 滚动条上下滚动的距离 + 当前窗口的高度) >= 当前文档的高度
  举例:
  - 当前文档高度:存储10条数据,100px。
  - 滚动条距底部的距离:1px。
  - 当前窗口的高度:80px。
  - 滚动条上下滚动的距离:>=19px。

  因为文档高度不确定,不能只判断 滚动条上下滚动的距离大于等于19px。即要判断: 滚动条距底部的距离1px+当前窗口的高度80px +滚动条上下滚动的距离19px >=当前文档的高度。


1.3) 前置知识点:
  $(function(){}) 页面加载事件
  $(window) 获取当前窗口对象
  scroll() 鼠标滚动事件
  $(window).height() 当前窗口的高度
  $(window).scrollTop() 滚动条上下滚动的距离
  $(document).height() 当前文档高度

二、实现思路和代码


2.1)页面实现思路:
1. 定义发送请求标记。(控制是否发起请求,如果当前处于请求状态,就不能再去发请求,只有在请求完毕才能重新发起请求,类似于多线程里的等待唤醒机制)
2. 定义当前页码和每页显示的条数。 (分页必备的两个参数)
3. 定义滚动条距底部的距离。(可以设置固定值1就可以)
4. 设置页面加载事件。(事件里完成后续功能)
5. 为当前窗口绑定滚动条滚动事件。()
6. 获取必要信息(当前窗口的高度,滚动条上下滚动的距离,当前文档的高度)。
7. 计算当前展示数据是否浏览完毕。(浏览完毕需要发起请求)
8. 判断请求标记是否为 true。
9. 为true,将请求标记置为 false,当前异步操作完成前,不能重新发起请求。
10. 根据当前页和每页显示的条数来请求查询分页数据。
11. 当前页码+1。

页面和代码:

 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>网站首页</title>
    <link rel="stylesheet" href="css/tt.css">
</head>
<body>
<div class="top">
    <span class="top-left">下载APP</span>
    <span class="top-left"> 北京         晴天</span>
    <span class="top-right">更多产品</span>
</div>
 
<div class="container">
 
    <div class="left">
        <a>
            <img src="img/logo.png"><br/>
        </a>
 
        <ul>
            <li>
                <a class="channel-item active" href="#">
                    <span>
                        推荐
                    </span>
                </a>
            </li>
 
            <li><a class="channel-item" href="#">
                <span>
                    视频
                </span>
            </a></li>
 
            <li><a class="channel-item" href="#">
                <span>
                    热点
                </span>
            </a></li>
 
            <li><a class="channel-item" href="#">
                <span>
                    直播
                </span>
            </a></li>
 
            <li><a class="channel-item" href="#">
                <span>
                    图片
                </span>
            </a></li>
 
            <li><a class="channel-item" href="#">
                <span>
                    娱乐
                </span>
            </a></li>
 
            <li><a class="channel-item" href="#">
                <span>
                    游戏
                </span>
            </a></li>
 
            <li><a class="channel-item" href="#">
                <span>
                    体育
                </span>
            </a></li>
 
        </ul>
 
    </div>
    <div class="center">
        <ul class="news_list">
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        
                        
                        这里是内容 !这里是内容 !这里是内容 !这里是内容 !这里是内容 !1
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        这里是内容 !这里是内容 !这里是内容 !这里是内容 !这里是内容 !2
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        这里是内容 !这里是内容 !这里是内容 !这里是内容 !这里是内容 !3
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        这里是内容 !这里是内容 !这里是内容 !这里是内容 !这里是内容 !4
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        这里是内容 !这里是内容 !这里是内容 !这里是内容 !这里是内容 !5
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        这里是内容 !这里是内容 !这里是内容 !这里是内容 !这里是内容 !6
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        这里是内容 !这里是内容 !这里是内容 !这里是内容 !这里是内容 !7
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        这里是内容 !这里是内容 !这里是内容 !这里是内容 !这里是内容 !8
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        这里是内容 !这里是内容 !这里是内容 !这里是内容 !这里是内容 !9
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        这里是内容 !这里是内容 !这里是内容 !这里是内容 !这里是内容 !10
                        <hr>
                    </a>
                </div>
            </li>
        </ul>
 
        <div class="loading" style="text-align: center; height: 80px">
            <img src="img/loading2.gif" height="100%">
        </div>
 
        <div class="content">
            <div class="pagination-holder clearfix">
                <div id="light-pagination" class="pagination"></div>
            </div>
        </div>
 
        <div id="no" style="text-align: center;color: red;font-size: 20px"></div>
    </div>
</div>
</body>
<script src="js/jquery-3.3.1.min.js"></script>
<script>
    //1.定义发送请求标记
    let send = true;
 
    //2.定义当前页码和每页显示的条数
    let start = 1;
    let pageSize = 10;
 
    //3.定义滚动条距底部的距离
    let bottom = 1;//px
 
    //4.设置页面加载事件
    $(function () {
        //5.为当前窗口绑定滚动条滚动事件
        $(window).scroll(function () {
            //6.获取必要信息,用于计算当前展示数据是否浏览完毕
            //当前窗口的高度
            let windowHeight = $(window).height();
 
            //滚动条从上到下滚动距离
            let scrollTop = $(window).scrollTop();
 
            //当前文档的高度
            let docHeight = $(document).height();
 
            //7.计算当前展示数据是否浏览完毕
            //当 滚动条距底部的距离 + 当前滚动条滚动的距离 + 当前窗口的高度 >= 当前文档的高度
            if((bottom + scrollTop + windowHeight) >= docHeight) {
                //8.判断请求标记是否为true
                if(send == true) {
                    //9.将请求标记置为false,当前异步操作完成前,不能重新发起请求。
                    send = false;
                    //10.根据当前页和每页显示的条数来 请求查询分页数据
                    queryByPage(start,pageSize);
                    //11.当前页码+1
                    start++;
                }
            }
        });
    });
 
    //定义查询分页数据的函数
    function queryByPage(start,pageSize){
        //加载动图显示
        $(".loading").show();
        //发起AJAX请求
        $.ajax({
            //请求的资源路径
            url:"newsServlet",
            //请求的参数
            data:{"start":start,"pageSize":pageSize},
            //请求的方式
            type:"POST",
            //响应数据形式
            dataType:"json",
            //请求成功后的回调函数
            success:function (data) {
                if(data.length == 0) {
                    $(".loading").hide();
                    $("#no").html("加载完毕...");
                    return;
                }
                //加载动图隐藏
                $(".loading").hide();
                //将数据显示
                let titles = "";
                for(let i = 0; i < data.length; i++) {
                    titles += "<li>\n" +
                        "                <div class=\"title-box\">\n" +
                        "                    <a href=\"#\" class=\"link\">\n" +
                                                    data[i].title +
                        "                        <hr>\n" +
                        "                    </a>\n" +
                        "                </div>\n" +
                        "            </li>";
                }
 
                //显示到页面
                $(".news_list").append(titles);
                //将请求标记设置为true
                send = true;
            }
        });
    }
 
</script>
</html>

 

2.2)服务器实现思路:
1. 获取请求参数(当前页,每页显示的条数)。
2. 根据当前页码和每页显示的条数,调用业务层的方法,得到分页 Page 对象。
3. 将得到的数据转为 json。
4. 将数据响应给客户端。

服务器代码:

public class NewsServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求和响应的编码
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");
 
        //1.获取请求参数
        String start = req.getParameter("start");
        String pageSize = req.getParameter("pageSize");
 
        //2.根据当前页码和每页显示的条数来调用业务层的查询方法,得到分页Page对象
        Page page = service.pageQuery(Integer.parseInt(start), Integer.parseInt(pageSize));
 
        //3.将得到的数据转为JSON
        String json = new ObjectMapper().writeValueAsString(page);
 
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
 
        //4.将数据响应给客户端
        resp.getWriter().write(json);
    }
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }
}

 

成功实现。

标签:jQuery,let,入门,滚动条,分页,内容,当前,请求,这里
From: https://www.cnblogs.com/kongsq/p/18391664

相关文章

  • ROS 入门-如何在Ubuntu系统中安装不同版本的ROS并编写基本示例
    引言在当今快速发展的科技时代,机器人技术正以前所未有的速度改变着我们的生活。从工业生产线上的自动化装配,到家庭中的智能助手,再到医疗领域的精密手术,机器人无处不在。然而,随着机器人应用范围的不断扩展,如何高效地开发和部署复杂的机器人系统成为了亟待解决的问题。正是在......
  • 音视频入门基础:WAV专题(7)——FFmpeg源码中计算WAV音频文件每个packet的size值的实现
    一、引言从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以显示WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的size:这个“size”实际是AVPacket结构体中的成员变量size,为WAV......
  • ROS1 入门 —— 编写自定义节点Node
    引言机器人操作系统(RobotOperatingSystem,ROS)是一个开源的元操作系统,用于开发机器人的软件。它并不是一个真正的操作系统,而是一套软件框架和服务,设计用来帮助开发者构建复杂的机器人系统。ROS提供了硬件抽象、设备驱动、库、消息传递和工具包等,使得机器人软件的开发变得......
  • 【VS Code编写Python】Python 快速入门指南
    1.前言Python扩展使VisualStudioCode成为出色的Python编辑器,可在任何操作系统上运行,并可与各种Python解释器一起使用。首先安装:VS代码Python解释器(任何积极支持的Python版本)VSCode市场上的Python扩展要进一步自定义VSCodeforPython,您可以利用Python......
  • C++菜鸟教程 - 从入门到精通 第一节
    一.C++简介C++是一种编程语言,它是由BjarneStroustrup于1979年在贝尔实验室开始设计开发的。C++进一步扩充和完善了C语言,是一种面向对象的程序设计语言。C++可运行于多种平台上,如Windows、MAC操作系统以及 UNIX的各种版本。C++是一种静态类型的、编译式的、......
  • Datawhale X 李宏毅苹果书 AI夏令营 深度学习入门笔记02
    目录一、学习资料二、学习笔记(一)线性模型1、考虑周期性2、修改模型(二)模型变形之分段线性曲线1、分段线性直线2、分段线性曲线的图像和表达式(机器学习第一步:写出带有未知数的函数)(1)如何构成(2)如何表达(3)如何改进3、分段线性曲线的损失(机器学习第二步:定义损失)4、分段......
  • JAVA之JVM入门
    Java虚拟机(JVM)是Java平台的核心部分之一,它为Java程序提供了运行环境。一、历史背景1.SunClassicVM发布时间:1996年重要功能:Java1.0的默认JVM。支持基本的字节码执行。简单的垃圾回收机制。2.HotSpotVM发布时间:1999年重要功能:JDK1.3开始成为默认JVM。引入了......
  • Java 入门指南:Java 并发编程 —— AQS、AQLS、AOS 锁与同步器的框架
    AQSAQS是AbstractQueuedSynchronizer的缩写,即抽象队列同步器,是Java.util.concurrent中的一个基础工具类,用于实现同步器(Synchronizer)的开发。AQS提供了一种实现锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的同步器,使得开发者能够更方便地编写线程安全的......
  • 【Python】Flask 快速入门
    Flask介绍Flask是一个轻量级的PythonWeb框架,非常适合快速开发和小型应用。官网:https://flask.palletsprojects.com/en/3.0.x/中文文档:https://dormousehole.readthedocs.io/en/latest/教程:https://www.runoob.com/flask/flask-tutorial.htmlFlask框架......
  • 【Python】Scrapy 快速入门
    Scrapy介绍Scrapy是一个强大的Python爬虫框架官网:https://scrapy.org/官方文档:https://docs.scrapy.org/en/latest/intro/tutorial.html教程参考:https://www.runoob.com/w3cnote/scrapy-detail.htmlScrapy架构概览Scrapy中的数据流由执行引擎......