【学习笔记45】JavaScript的分页效果

news2024/11/30 8:30:36

highlight: an-old-hope

一、分页效果

在这里插入图片描述

(一) 首次打开页面

  1. 从数组内截取部分数据展示
  2. 调整页码信息为:当前页 / 总页码
  3. 处理按钮
    • 3.1 如果当前在第一页,禁用上一页按钮(添加类名disable)
    • 3.2 如果当前页在最后一页(当前页 === 总页码),禁用下一页按钮(添加类名disable)

(二) 点击下一页

  1. 当前页++
  2. 从数组内截取部分数据展示
  3. 调整页码信息为:当前页 / 总页码
  4. 处理按钮
    • 4.1 如果当前在第一页,禁用上一页按钮(添加类名disable)
    • 4.2 如果当前页在最后一页(当前页 === 总页码),禁用下一页按钮(添加类名disable)

(三) 点击上一页

  1. 当前页–
  2. 从数组内截取部分数据展示
  3. 调整页码信息为:当前页 / 总页码
  4. 处理按钮
    • 4.1 如果当前在第一页,禁用上一页按钮(添加类名disable)
    • 4.2 如果当前页在最后一页(当前页 === 总页码),禁用下一页按钮(添加类名disable)

(四) 改变每页展示数据

  1. 修改每页展示数据
  2. 从数组内截取部分数据展示
  3. 调整页码信息为:当前页 / 总页码
  4. 处理按钮
    • 4.1 如果当前在第一页,禁用上一页按钮(添加类名disable)
    • 4.2 如果当前页在最后一页(当前页 === 总页码),禁用下一页按钮(添加类名disable)

二、案例分析

在这里插入图片描述

三、HTML代码

    <div class="pagination">
        <span class="prev disable">&lt;</span>
        <span class="total">1 / 100</span>
        <span class="next">&gt;</span>
        <select>
            <option value="4">4</option>
            <option value="8">8</option>
            <option value="12">12</option>
            <option value="16">16</option>
        </select>
    </div>
    <!-- 动态渲染页面 -->
    <ul></ul>

四、CSS代码

    <style>
        * {
            margin: 0;
            padding: 0;
        }
        ul,
        li {
            list-style: none;
        }

        ul {
            width: 1200px;
            display: flex;
            flex-wrap: wrap;
            margin: 0 auto;
            justify-content: space-between;
            padding-top: 10px;
        }

        li {
            width: 290px;
            border: 1px solid #333;
            margin-bottom: 10px;
            padding: 5px;
            box-sizing: border-box;
        }

        li>img {
            width: 278px;
            display: block;
        }

        .pagination {
            width: 1200px;
            margin: 10px auto;
            height: 50px;
            display: flex;
            align-items: center;
        }

        .pagination>.prev,
        .pagination>.next {
            width: 50px;
            height: 30px;
            cursor: pointer;
            background-color: orange;
            font-size: 24px;
            color: #fff;
            display: flex;
            justify-content: center;
            align-items: center;
        }

        .pagination>.disable {
            cursor: not-allowed;
            background-color: #ccc;
        }

        .pagination>.total {
            font-size: 30px;
            font-weight: 700;
            margin: 0 20px;
        }

        .pagination>select {
            font-size: 22px;
            padding-left: 20px;
            margin-left: 30px;
        }
    </style>

五、JS代码

1、说明

模拟数据库,外部导入数据

    <script src="./dm_list.js"></script>

在这里插入图片描述

2、从数组内截取部分数据展示

           /**
             *  1.1 从数组内截取部分数据展示
             * 
             *  从哪里截取到哪?
             * 
             *      假设当前每页展示4条数据
             *          第1页 展示4条        ---> [0]~[3]
             *          第2页 展示4条        ---> [4]~[7]
             *          第3页 展示4条        ---> [8]~[11]
             * 
             *      假设当前每页展示8条数据
             *          第1页 展示8条        ---> [0]~[7]
             *          第2页 展示8条        ---> [8]~[15]
             * 
             *      开始下标:(当前页 - 1) * 每页展示多少条
             *          (1 - 1) * 4  === 0
             *          (2 - 1) * 4  === 4
             *          (3 - 1) * 4  === 8
             *      结束下标:当前页 * 每页展示多少 - 1
             *          1 * 4  - 1   == 3
             *          2 * 4  - 1   == 7
             *          3 * 4  - 1   == 11
              * 
             *      假设当前页为 currentNum     每页展示 pageSize 条 数据
             *          开始下标:  (currentNum - 1) * pageSize
             *          结束下标: currentNum * pageSize - 1
             * 
             *      使用 数组.slice(开始下标, 结束下标)  包前不包后
             *              ---> 数组.slice((currentNum - 1) * pageSize, currentNum * pageSize - 1 + 1)
             *              ---> 数组.slice((currentNum - 1) * pageSize, currentNum * pageSize)
            */

3、代码实现

    <script>
        // 0. 获取标签对象
        const oUl = document.querySelector('ul');                //获取ul标签
        const oTotal = document.querySelector('.total');         //页码信息
        const oPrev = document.querySelectorAll('span')[0];      //上一页
        const oNext = document.querySelectorAll('span')[2];      //下一页
        const OSelect = document.querySelector('select');        //选择页面

        // 1. 定义变量 存储数据
        let currentNum = 1;      //当前页面
        let pageSize = 4;        //展示几条数据
        let totalNum = 0;        //总页面

        // 2. 页面渲染函数
        function myFn() {
            // 从数组中截取数据
            let newList = list.slice((currentNum - 1) * pageSize, currentNum * pageSize);

            // 将截取的数据,渲染到页面中
            oUl.innerHTML = newList.reduce(function (prev, item) {
                return prev + `
                <li>
                    <img src="${item.pic}" alt="">
                    <p>${item.name}</p>
                    <p>城市:${item.city}</p>
                    <p>地址:${item.address}</p>
                    <p>价格:${item.price}</p>
                    <p>时间:${item.showTime}</p>
                </li>
                `;
            }, '')

            // 调整页码信息
            totalNum = Math.ceil(list.length / pageSize);

            // 将页码信息渲染到页面去
            oTotal.innerHTML = `${currentNum}/${totalNum}`;

            // 处理按钮
            // 如果当前在第一页,禁用上一页按钮 (添加类名disable)
            // if (currentNum === 1) {

            //     oPrev.className = 'prev disable';

            // } else {

            //     oPrev.className = 'prev disable';
            // }

            // 三元运算符
            // currentNum === 1 ? oPrev.className = 'prev disable' : oPrev.className = 'prev';
            oPrev.className = currentNum === 1 ? 'prev disable' : 'prev';

            // 如果当前页在最后一页(当前页 === 总页码)禁用下一页按钮 (添加类名disable)
            oNext.className = currentNum === totalNum ? 'prev disable' : 'prev';
  
        }

        // 3. 首页打开页面 直接调用函数
        myFn();

        // 4. 点击下一页,下一页的效果
        oNext.addEventListener('click', function(){
            // 边界判断
            if (currentNum == totalNum) return;

            // 当前页面++
            currentNum++;

            // 调用函数 渲染页面
            myFn();
        })

        oPrev.addEventListener('click', function(){
            // 边界判断
            if (currentNum == 1) return;

            // 当前页面++
            currentNum--;

            // 调用函数 渲染页面
            myFn();
        })

        // 5. 改变页面展示数据
        OSelect.addEventListener('change', function(){
            pageSize = OSelect.value;

            currentNum = 1;
            // 调用函数 渲染页面
            myFn();
        })
    </script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud微服务实践之六 Feign最佳实践(抽取)

传统Feign面临的问题&#xff1a; 1、每个子项目都要写所要调用服务的pojo 2、每个子项目都要写所要调用服务的feign client客户端 优化思路&#xff1a;由提供服务服务的子项目统一归集代码&#xff0c;统一对外提供接口服务、Feign子项目统一管理服务远程调用、 将FeignClien…

【菜菜的sklearn课堂笔记】逻辑回归与评分卡-用逻辑回归制作评分卡-分箱

视频作者&#xff1a;菜菜TsaiTsai 链接&#xff1a;【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 分训练集和测试集 from sklearn.model_selection import train_test_split X pd.DataFrame(X) y pd.DataFrame(y)Xtrain,Xtest,Ytrain,Ytest …

DSP-FIR滤波器设计

目录 Gibbs现象:用三角函数逼近间断点: Gibbs现象特点: 常见窗函数&#xff1a; 窗函数的主要频谱参数: 矩形窗(Rectangular)&#xff1a; 汉宁窗(Hanning)&#xff1a; 汉明窗(Hamming)&#xff1a; 布莱克曼窗(Blackman)&#xff1a; 窗函数之间的性能对比&#xff…

Script file ‘F:.....\pip-script.py‘ is not present 原因及解决办法

一 报错类型 二 原因 可能我们使用pip install --upgrade pip或者conda安装一下包时因为网络原因导致只是卸载旧版本而未安装。 三 解决策略 3.1 Anaconda 切换到你的anaconda安装目录并进入Scripts文件夹内(D:\Apps\anaconda3\Scripts) 运行以下代码&#xff1a; conda i…

【Kafka】Kafka基础架构及相关概念

文章目录前言一、Kafka基础知识二、Kafka分区副本参考前言 在以前的定义中&#xff0c;Kafka被定义为一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域&#xff0c;类似的产品主要有ActiveMQ、RabbitM…

flutter useRootNavigator属性的作用

useRootNavigator 用于确定是否将对话框推到距给定上下文最远或最接近给定上下文的Navigator 问题&#xff1a; 在使用showDatePicker的时候&#xff0c;android手机如果侧滑返回的时候&#xff0c;页面会关闭&#xff0c;showDatePicker弹出的dailog缺没有关闭。 使用如下…

【学习笔记42】操作DOM

操作DOM一、操作DOM1、步骤2、创建元素节点3、创建文本节点4、增加dom(添加到指定父节点的最后)5、增加dom(添加到指定父节点的最后)6、增加dom(添加到父节点的最前边)7、删除DOM8、修改某一个节点二、克隆DOM1、说明2、复制(克隆)一个LI三、获取元素尺寸(占地面积)四、获取浏览…

WordPress怎么禁止用户使用HTML标签,自动过滤HTML代码?

WordPress怎么禁止用户使用HTML标签&#xff0c;自动过滤HTML代码&#xff1f;出于安全考虑WordPress默认禁止角色为作者的用户写文章时直接添加HTML代码&#xff0c;包括读者留言时也是不允许的。如果想开放此限制&#xff0c;允许作者撰写文章和读者留言时添加HTML代码&#…

Java项目——博客系统(前后端交互)

项目展示 项目说明 使用servlet&#xff0c;实现前后端交互&#xff0c;通过jdbc和mysql数据库进行数据传输&#xff0c;使得可以将用户信息和博客列表存储在数据库中&#xff0c;实现真正的服务器&#xff0c;客户端&#xff0c;数据库三者的交互 项目代码 数据库 在sql数…

进阶的风控策略篇:如果筛选最佳策略帮我们锁定优质客群

在番茄风控往期的内容中&#xff0c;我们一直在跟大家介绍风控策略干货内容&#xff0c;相关内容包括&#xff1a; ①风控的拒绝捞回策略 ②多规则的策略筛选 ③策略的调优 ④策略的开发与应用 … 策略相关的内容可谓干货满满&#xff0c;比如关于策略开发与应用的内容上&#…

SpringBoot SpringBoot 原理篇 1 自动配置 1.15 自动配置原理【1】

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.15 自动配置原理【1】1.15.1 看源码了1.15.2 Import({AutoConfig…

初识图学习

初识图学习 一、简单图的基础 什么是图 七桥问题的定义是&#xff1a;一个步行者怎样才能不重复&#xff0c;不遗漏的一次走完七座桥。最后回到出发点。 当年&#xff0c;大数学家在解答七桥问题的同时&#xff0c;也开创了数学的一个新分支图论。 可以毫不夸张的说&#xff…

半小时制作简单版澳大利亚导游地图,太简单了,你也可以

目录 1 前言 2 QQ扫码注册一个账号 3 编辑景区 3.1 新建一个景区 3.2 增加景点 4 预览 5 申请管理员审核 6 看一下发布后的效果 1 前言 不少景区为了提升游客旅游体验&#xff0c;需要制作自己的导游地图&#xff0c;游客扫一下二维码就可以看到景区全貌和景点介绍。制作这…

销售词汇Sell In、Sell Through、Sell Out辨析

原文出处&#xff1a;https://zhuanlan.zhihu.com/p/89563704 销售的过程其实是一个货物和资金双向流动的过程&#xff0c;货物从厂家流向消费者&#xff0c;资金从消费者流向厂家。 但是大多数情况下&#xff0c;厂家是没办法直接把货物卖给消费者的&#xff0c;或者说厂家是没…

虚拟机安装openEuler/MobaXterm工具登录系统

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

一个用C#开发的操作系统的开源项目

自从C#的AOT编译机制发布以来&#xff0c;有趣的项目越来越多&#xff0c;今天给大家推荐一个开源项目&#xff0c;用C#开发的64位操作系统。 文章目录项目简介项目源码开发环境虚拟机与裸机硬件支持功能列表完善的编译、安装文档操作系统界面项目地址项目简介 这是一个使用.N…

SpringBoot SpringBoot 原理篇 2 自定义starter 2.2 IP计数业务功能开发【自定义starter】

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇2 自定义starter2.2 IP计数业务功能开发【自定义starter】2.2.1 大概看看别人…

阿里云服务器安装mysql8

1. 安装前准备 查看是否安装&#xff1a; rpm -qa | grep mysql移除不想要的版本&#xff1a; yum remove 名称查找关于mysql的所有文件&#xff08;配置文件&#xff09; find / -name mysql ##或者 whereis mysql删除配置文件 rm -rf 文件最后需要注意的是&#xff1a;卸载后…

配置iSCSI实现Linux的远程块存储

文章目录一 名词解释二 需求三 环境准备四 搭建流程1 服务端准备硬盘并分区2 服务端安装软件包&#xff0c;并启动服务3 服务端 5个create 操作3-1 定义块设备&#xff0c;创建后备存储。3-2 为目标创建IQN3-3 创建一个ACL来控制特定的客户端访问3-4 为每个后备存储创建一个LUN…

基于C#的校园闲置物品共享系统的开发和实现(Asp.net+Web)

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1选题背景 1 1.1.1校园闲置物品共享系统的开发背景 1 1.1.2学生闲置物品交易活动的现状 1 1.2 校园闲置物品共享系统的研究方向和内容 1 1.2.1研究方向 1 1.2.2研究内容 2 1.3 校园闲置物品共享系统的设计目标 2 1.4 校园闲置物品共…