原生js实现分页功能

2023-10-27

原生就是实现分页功能

代码如下:

var pagination = function(option,fun){
    this.parentId = option.id;                             //容器
    this.pageSize = option.pageSize || 1;                  //每页显示多少条
    this.totals = option.totals || 0;                      //总条目数
    this.currentPage = option.currentPage || 1;            //当前页
    this.showFirstBtn = option.showFirstBtn || false;      //显示首页按钮
    this.showLastBtn = option.showLastBtn || false;        //显示尾页按钮
    this.totalPage = Math.ceil(this.totals / this.pageSize);//总页数
    this.firstText = '首页';
    this.lastText = '尾页';
    this.preText = '上一页';
    this.nextText = '下一页';
    this.goText = '跳转至';
    /**
     * 创建dom元素
     */
    this.createDom = function(nodeName,attr,text){
        var el = document.createElement(nodeName);
        if(attr){
            for(var key in attr){
                el.setAttribute(key,attr[key]);
            }
        }
        if(text){
            el.innerText = text;
        }
        return el;
    }
    /**
     * 添加className
     */
    this.addClass = function(ele,className){
        var oldClass = ele.className.split(' ');
        if(oldClass.indexOf(className) < 0){
            oldClass.push(className);
            ele.className = oldClass.join(' ');
        }
    }
    /**
     * 删除class
     */
    this.delClass = function(ele,className){
        var classArr = ele.className.split(' ');
        classArr.forEach(function(name,i){
            if(name == className){
                classArr.replace(i,1);
            }
        });
        ele.className = classArr;
    }
    /**
     * 是否包含class
     */
    this.hasClass = function(ele,className){
        var classArr = ele.className.split(' ');
        return classArr.indexOf(className) < 0 ? false : true;
    }
    var self = this;
    this.refshPage = function(index){
        self.currentPage = index;
        fun(index);
        self.renderPage();
        var pageParent = document.getElementById(self.parentId);
        if(index == 1){
            self.addClass(pageParent.querySelector('.preBtn'),'btnDisabled');
            
        }else if(index == self.totalPage){
            self.addClass(pageParent.querySelector('.nextBtn'),'btnDisabled');
        }else{
            self.delClass(pageParent.querySelector('.preBtn'),'btnDisabled');
            self.delClass(pageParent.querySelector('.nextBtn'),'btnDisabled');
        }
    }
    /**
     * 生成分頁dom
     */
    this.getPageDom = function(index,totalPage){
        var pageBox = self.createDom('div',{class:'pageBox'});
        var firstBtn = self.createDom('span',{class:'firstBtn'},self.firstText);
        var lastBtn = self.createDom('span',{class:'lastBtn'},self.lastText);
        var preBtn = self.createDom('span',{class:'preBtn'},self.preText);
        var nextBtn = self.createDom('span',{class:'nextBtn'},self.nextText);
        if(self.showFirstBtn){
            pageBox.appendChild(firstBtn);
        }
        if(self.showLastBtn){
            pageBox.appendChild(lastBtn);
        }
        firstBtn.onclick = function(){
            self.refshPage(1);
        }
        lastBtn.onclick = function(){
            self.refshPage(totalPage);
        }
        preBtn.onclick = function(){
            var index = --self.currentPage;
            if(index < 1)index = 1;
            self.refshPage(index);
        }
        nextBtn.onclick = function(){
            var index = ++self.currentPage;
            if(index > totalPage)index = totalPage;
            self.refshPage(index);
        }
        pageBox.appendChild(preBtn);
        if(totalPage <= 10){
            for(var i = 1; i <= totalPage; i++){
                var page = self.createDom('span',{class:'pageNum'},i);
                if(i == index){
                    self.addClass(page,'pageActive');
                    
                } 
                pageBox.appendChild(page);
                (function(i){
                    page.onclick = function(){
                        self.refshPage(i);
                    }
                })(i);
            }
            pageBox.appendChild(nextBtn);
        }else{
            if(index <= 5){
                for(var i = 1; i < 9; i++){
                    var page = self.createDom('span',{class:'pageNum'},i);
                    if(i == index) self.addClass(page,'pageActive');
                    pageBox.appendChild(page);
                    (function(i){
                        page.onclick = function(){
                            self.refshPage(i);
                        }
                    })(i);
                }
                pageBox.appendChild(self.createDom('span',{class:'dots'},'...'));
                var lastPage = self.createDom('span',{class:'pageNum'},totalPage);
                pageBox.appendChild(lastPage);
                lastPage.onclick = function(){
                    self.refshPage(totalPage);
                }
                pageBox.appendChild(nextBtn);
            }
            if(index >= (totalPage - 4)){
                var firstPage = self.createDom('span',{class:'pageNum'},1);
                firstPage.onclick = function(){
                    self.refshPage(1);
                }
                pageBox.appendChild(firstPage);
                pageBox.appendChild(self.createDom('span',{class:'dots'},'...'));
                for(var i = totalPage - 9; i <= totalPage; i++){
                    var page = self.createDom('span',{class:'pageNum'},i);
                    if(i == index) self.addClass(page,'pageActive');
                    pageBox.appendChild(page);
                    (function(i){
                        page.onclick = function(){
                            self.refshPage(i);
                        }
                    })(i);
                }
                pageBox.appendChild(nextBtn);
            }
            if(index > 5 && index < (totalPage - 4)){
                var firstPage = self.createDom('span',{class:'pageNum'},1);
                firstPage.onclick = function(){
                    self.refshPage(1);
                }
                pageBox.appendChild(self.createDom('span',{class:'dots'},'...'));
                for(var i = index - 3; i <= index + 3; i++){
                    var page = self.createDom('span',{class:'pageNum'},i);
                    if(i == index) self.addClass(page,'pageActive');
                    pageBox.appendChild(page);
                    (function(i){
                        page.onclick = function(){
                            self.refshPage(i);
                        }
                    })(i);
                }
                pageBox.appendChild(self.createDom('span',{class:'dots'},'...'));
                var lastPage = self.createDom('span',{class:'pageNum'},totalPage);
                pageBox.appendChild(lastPage);
                lastPage.onclick = function(){
                    self.refshPage(totalPage);
                }
                pageBox.appendChild(nextBtn);
            }
        }
        if(index == 1){
            self.addClass(preBtn,'btnDisabled');
        }else if(index == totalPage){
            self.addClass(nextBtn,'btnDisabled');
        }
        if(self.showLastBtn){
            pageBox.appendChild(lastBtn);
        }
        return pageBox;
    };
    /**
     * 渲染page
     */
    this.renderPage = function(){
        var pageParent = document.getElementById(self.parentId);
        var pagesDom = self.getPageDom(self.currentPage,self.totalPage);
        pageParent.innerHTML = '';
        pageParent.appendChild(pagesDom);
    }
    this.renderPage();
}

  调用方法:

new pagination({
            id:dataStore.pageId, 
            pageSize:dataStore.pageSize,
            totals:data.length,
            currentPage:1
        },function(index){
            var startNum = (index - 1 ) * dataStore.pageSize;
            var endNun = index * dataStore.pageSize;
            var listData = data.slice(startNum,endNun);
            renderMain(listData);
        });

  

分页效果:

 

转载于:https://www.cnblogs.com/helloluckworld/p/9837636.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

原生js实现分页功能 的相关文章

  • 华为OD机试 - 评论转换输出(Java)

    题目描述 在一个博客网站上 每篇博客都有评论 每一条评论都是一个非空英文字母字符串 评论具有树状结构 除了根评论外 每个评论都有一个父评论 当评论保存时 使用以下格式 首先是评论的内容 然后是回复当前评论的数量 最后是当前评论的所有了评论
  • 操作系统内核

    现代操作系统一般将OS划分为若干个层次 再将OS的不同功能分别设置在不同的层次中 通常将一些与硬件紧密相关的模块 如中断处理程序等 各种常用及运行频率较高的模块 如时钟管理 进程调度和许多模块所公用的二些基本操作 都安排在紧靠硬件的软件层次
  • vue生命周期

    随着对 vue 的不断了解 会越来越发现它生命周期的重要性 只有了解了它的生命周期 才能在开发项目的时候在逻辑上的很好的判断什么时候该发生什么事件 即很好的控制页面 一 什么是 vue 生命周期 Vue 实例从创建到销毁的过程 就是生命周期
  • kong+Verdaccio+ldap(docker)

    需求 使用Kong来代理Verdaccio 实现直接通过域名 path的方式来访问 并且Verdaccio使用ldap来管理 前提 Kong ldap已部署好 并且也部署好了Kong Dashboard 后面有需求再写关于Kong代理的各种
  • 国内的Ubuntu镜像源

    国内的Ubuntu镜像源 Ubuntu清华镜像源 今天学习docker需要在线Ubuntu镜像 所以做了一个镜像下载地址笔记 方面以后的下载 官方镜像下载访问地址 https cn ubuntu com download alternati
  • 明哥复习MyBatis(1)

    这不是原创 借鉴尚硅谷的 不是原创 一 核心配置文件详解
  • impdp或expdp报错ORA-39002: invalid operation,ORA-39070: Unable to open the log file

    oracle oracle rac01 backup cat expdp par USERID as sysdba DIRECTORY KMDATA EXP job name jinky exp filesize 5000m paralle
  • Java集合——Iterable和Iterator接口介绍

    Iterable Iterable和Iterator是什么 Iterable源码 Iterator源码 使用 Iterable和Iterator是什么 Iterable是Collection的实现接口 即是集合的最顶级父类 Iterator
  • 小白学股票基金_2

    到底是买股票还是买基金 说基金和股票差不多指的应该是偏股型基金 但是基金里面还有债券型 QDII以及非常大众化的货币型基金 众所周知的余额宝就是一款货币型基金啦 等等 风险等级也不一样 所以 为防止这样混为一谈 我们这里讨论的就是炒股和买偏
  • 0.0 Windows + Linux(Ubuntu20.04) 超简单的双系统安装

    目录 一 U盘启动盘的制作 1 下载操作系统 2 下载U启动制作工具 二 磁盘分配 三 Ubuntu20 04系统安装 1 修改bios为U启动 2 安装配置Ubuntu 2 1 Install Ubuntu 2 2 安装关键之处在于分区
  • 4年经验来面试20K的测试岗,连基础都不会,还不如招应届生!

    公司前段时间缺人 也面了不少测试 结果竟然没有一个合适的 一开始瞄准的就是中级的水准 也没指望来大牛 提供的薪资在10 20k 面试的人很多 但平均水平很让人失望 看简历很多都是3 4年工作经验 但面试中 不提工具和编程 仅仅基础的技术很多
  • Flink简单教学5-时间

    时间 Time Flink支持三种不同的时间 处理时间 processing time 指当前操作的时间 如 map 当程序以处理时间运行 所有基于时间的操作 窗口 都依赖各个operator的机器时间 事件时间 event time 事件
  • office 2010 projectn visio 下载

    Office 2010 project专业版 64位 ed2k file cn project professional 2010 x64 515551 exe 453437272 84D14496F889767D46C9DE576154B
  • 矩阵的基本演算

    目录 转置 逆 迹 行列式 转置 A B T
  • 网易低代码引擎Tango正式开源

    一 Tango简介 Tango 是一个用于快速构建低代码平台的低代码设计器框架 借助 Tango 只需要数行代码就可以完成一个基本的低代码平台前端系统的搭建 Tango 低代码设计器直接读取前端项目的源代码 并以源代码为中心 执行和渲染前端
  • element ui Tag 动态添加标签

    1 首先调接口获取到标签列表 级联选择器如果选择的不是第三级菜单 async getParamsData if this selectedCateKeys length 3 级联选择器不会有参数 下面的面板也都为空 this selecte
  • 三层架构到DDD四层架构演进

    应用架构演化 三层架构 三层架构 为什么还画了一层 Model 呢 因为 Model 只是简单的 Java Bean 里面只有数据库表对应的属性 有的应用会将其单独拎出来作为一个 但实际上可以合并到 DAO 层 第一步 数据模型与DAO层合
  • 检测是否为快乐数

    编写一个算法来判断一个数 n 是不是快乐数 快乐数 定义为 1 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 2 然后重复这个过程直到这个数变为 1 也可能是 无限循环 但始终变不到 1 3 如果可以变为1 那么这个数就是快
  • MySQL类型定义 - 字符串类型

    1 char类型 1 CHAR类型和VARCHAR类型 CHAR类型和VARCHAR类型都在创建表时指定了最大长度 其基本形式如下 字符串类型 M 其中 字符串类型 参数指定了数据类型为CHAR类型还是VARCHAR类型 M参数指定了该字符
  • 数据结构 —七大排序算法(图文详细版)

    文章目录 前言 一 插入排序 1 直接插入排序 1 原理 2 实现 3 稳定性 时间复杂度 2 希尔排序 1 原理 2 具体实现 3 稳定性 时间复杂度 二 选择排序 1 直接选择排序 1 原理 2 具体实现 3 稳定性 时间复杂度 4 优

随机推荐

  • chromebook刷_使用Chromebook编码

    chromebook刷 Chromebooks are awesome They re relatively simple and inexpensive devices that run Chrome OS a stripped down
  • 【linux】基本工具gcc/g++及Makefile

    文章目录 一 程序翻译过程 1 程序的翻译过程 2 理解选项的含义 3 动态链接与静态链接 二 Linux项目自动化构建工具 make Make le 1 背景 2 实例说明 3 原理 4 语法 5 为什么gcc不更新文件 6 推导规则 三
  • eclipse svn 忽略文件夹

    以忽略 target 文件夹为例 window gt preferences gt team gt Ignored Resource gt Add Pattern gt 新建一个 target gt ok 再次同步可见traget下所有文件
  • 2023华为OD机试真题Java实现【食堂供餐/二分法】

    题目内容 某公司员工食堂以盒饭方式供餐 为将员工取餐排队时间降低为0 食堂的供餐速度必须要足够快 现在需要根据以往员工取餐的统计信息 计算出一个刚好能达成排队时间为0的最低供餐速度 即 食堂在每个单位时间内必须至少做出多少份盒饭才能满足要求
  • 假如让你来设计SSL/TLS协议

    前言 说起网络通信协议 相信大家对 TCP 和 HTTP 都很熟悉 它们可以说是当今互联网通信的基石 但是 在网络安全方面 它们却是有着很大安全风险 窃听风险 第三方攻击者可以随意窃听通信内容 比如获取支付账号密码 冒充风险 第三方攻击者可
  • 在 WSL2 上部署 PyTorch

    开发项目需要使用AI 但是我习惯用 VMware 来开发各类项目 于是查到 Enable NVIDIA CUDA on WSL 可以实现 CUDA VGPU 的功能 但是国内对这类资料较少 我就想顺便补个空白 在 WSL2 上部署 PyTo
  • <金融产品>京东金融2015年战略主攻三大方向:股权众筹、农村金融和校园金融...

    导读 2014年是京东金融全力奔跑的一年 2015年京东金融业务将会在三个方面发力 上线股权众筹平台 发力农村金融和校园金融 2014年 凭借京东白条 京保贝 京东众筹等产品 京东金融迅速在互联网金融领域占领一席之地 京东CEO刘强东对京东
  • 阅读论文的方法

    清单一 系统阅读论文的方法 1 试着找个安静的地方呆上几个小时 拿上你最喜欢的饮料 可能是咖啡 茶 或者别的什么东西 我经常在咖啡厅里工作 2 从阅读标题和摘要开始 目的是获得论文的高层次概述 作者的主要目标是什么 以及一些实验结果 摘要通
  • 华为OD机试真题B卷 Java 实现【计算礼品发放的最小分组数目】,附详细解题思路

    一 题目描述 又到了一年的末尾 项目组让小明负责新年晚会的小礼品发放工作 为使得参加晚会的同时所获得的小礼品价值相对平衡 需要把小礼品根据价格进行分组 但每组最多只能包括两件小礼品 并且每个分组的价格总和不能超过一个价格上限 为了保证发放小
  • npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\licc\package.json'

    问题描述 在项目中使用npm安装gulp时报异常 node modle文件夹出不来 异常输出如下 npm WARN enoent ENOENT no such file or directory open C Users licc pack
  • yolov5+opencv+java:通过DJL在maven项目中使用yolov5的小demo

    目录 前言 环境 导出yolov5s模型 编写Maven项目 编写pom xml文件 引入opencv依赖 下载opencv 获取opencv的jar包和动态链接库dll文件 将lib文件夹添加为Library 将yolov5权重文件放到资
  • C 中strcpy和memcpy的区别

    参考博客 https blog csdn net zcyzsy article details 53190691 https www cnblogs com metootxy p 3185000 html 一 以下是具体使用memcpy这个
  • 浅谈 Computed和Watch的区别

    computed 计算属性 类似于过滤器 对绑定到试图的数据进行处理 并监听变化进而执行对应的代码 基于它的依赖缓存 只有相关依赖发生改变时才会重新取值 而使用methods时 在重新渲染的时候 函数总会重新调用执行 computed属性默
  • Linux 虚拟化网络技术 — 虚拟网线(Veth-pair)

    虚拟网线 Veth pair Veth pair 不是一个设备 而是一对设备 作为虚拟网线用于连接两个虚拟网络设备 veth pair 是根据数据链路层的 MAC 地址对网络数据包进行转发的过程来实现的 本质是反转通讯数据的方向 需要发送的
  • C++Easyx教程(一)——如何在DEV-C++里安装Easyx库

    本文作者 C 橙羊 本文代码适合编译环境 DEV C 温馨提示 此文乃作者心血 如要转载请标注版权 否则视为抄袭 今天就算是我们Easyx教程的第一篇博文的诞生日了 那么今天橙羊就教大家如何在DEV C 里安装Easyx图形库 这里我用的是
  • 电子学会青少年C语言一级通过

    复习一级时 看了很多printf格式 整型 浮点型之类的问题 这就是考级 什么都考 覆盖面广 但考完不一定常用 计划继续报二级 主要考数组和字符串 三级开始考算法 其实可以考虑跨级报考 因为感觉每个级的内容相对独立 有人考了一级就考四级 五
  • 蛋白质结构域的概念_怎么查询蛋白质的全部信息 UniProKB数据库

    今天给大家介绍一个数据库 UniProKB数据库 网址http www uniprot org 这个数据库对于查询蛋白质相关信息还是很全面的 比如我们想要查询人类p53蛋白的主要功能 结构域 翻译后的修饰和参与的代谢途径 以及与它相互作用的
  • HTTP1.0和HTTP1.1

    什么是HTTP http是一个超文本传输协议 它是基于TCP协议的应用层传输协议 简单点说就是客户端和服务端进行数据传输的一种规则 http是一个无状态协议 它本身不会对发送过得请求和响应的通信状态进行持久化处理 这样做的目的是为了保持ht
  • 高效扩展性的全新Apple Mac Pro:专为专业工作流程与编程而设计

    随着科技的不断发展和专业工作需求的增加 全新的Apple Mac Pro应运而生 这款Mac Pro具备卓越的性能和出色的扩展功能 为专业人士提供了一个强大的工作平台 本文将探讨Mac Pro的特点 并提供一些适用于专业工作流程和编程的源代
  • 原生js实现分页功能

    原生就是实现分页功能 代码如下 var pagination function option fun this parentId option id 容器 this pageSize option pageSize 1 每页显示多少条 th