Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >原生js+ajax分页组件

原生js+ajax分页组件

作者头像
前端_AWhile
发布于 2022-05-10 13:43:19
发布于 2022-05-10 13:43:19
7.8K00
代码可运行
举报
文章被收录于专栏:前端一会前端一会
运行总次数:0
代码可运行

定义分页组件DOM

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div id="pagination" class="pagination"></div>

定义分页组件类及实例方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 分页组件类
function Pagination(_ref) {
    this.id = _ref.id;      //分页组件挂载的DOM节点
    this.curPage = _ref.curPage || 1; //初始页码
    this.draw = _ref.draw;      // 初始化分页请求次数
    this.pageSize = _ref.pageSize || 5; //分页个数
    this.pageLength = _ref.pageLength; //每页多少条
    this.pageTotal = 0; //总共多少页
    this.dataTotal = 0; //总共多少数据
    this.ajaxParam = _ref.ajaxParam;   // 分页ajax
    this.showPageTotalFlag = _ref.showPageTotalFlag || false; //是否显示数据统计
    this.showSkipInputFlag = _ref.showSkipInputFlag || false; //是否支持跳转
    this.ul = document.createElement('ul');

    this.init();
};

// 给实例对象添加公共属性和方法
Pagination.prototype = {
    init: function() {
        var pagination = document.getElementById(this.id);
        pagination.innerHTML = '';
        this.ul.innerHTML = '';
        pagination.appendChild(this.ul);
        var _this = this;
        _this.getPage(_this.curPage)
        .then( function( data ){
            //首页
            _this.firstPage();
            //上一页
            _this.lastPage();
            //分页
            _this.getPages().forEach(function (item) {
                var li = document.createElement('li');
                if (item == _this.curPage) {
                    li.className = 'active';
                } else {
                    li.onclick = function () {
                        _this.curPage = parseInt(this.innerHTML);
                        _this.init();
                    };
                }
                li.innerHTML = item;
                _this.ul.appendChild(li);
            });
            //下一页
            _this.nextPage();
            //尾页
            _this.finalPage();

            //是否支持跳转
            if (_this.showSkipInputFlag) {
                _this.showSkipInput();
            }
            //是否显示总页数,每页个数,数据
            if (_this.showPageTotalFlag) {
                _this.showPageTotal();
            }
        } )
        
    },
    // 分页数据请求
    getPage: function( curPage ){
        var _this = this;
        _this.draw++;
        return new Promise( function( resolve, reh ){
            $.ajax( {
                url: _this.ajaxParam.url,
                type: _this.ajaxParam.type,
                dataType: "json",
                data: {
                    curPage: curPage,
                    pageLength: 10,
                    draw: _this.draw
                },
                success: function(data) {
                    if( data.isSuccess === true ){
                        var data = data;
                        _this.pageTotal = Math.ceil( parseFloat( data.data.totalResult/_this.pageLength ) ),
                        _this.dataTotal = data.data.totalResult,
                        _this.draw = data.data.draw;
                        resolve( data )
                    }else {
                        reject( "请求错误" )
                    }
                },
                error: function(err) {
                    reject( err )
                }
            } )
        })
    },
    //首页
    firstPage: function() {
        var _this = this;
        var li = document.createElement('li');
        li.innerHTML = '首页';
        this.ul.appendChild(li);
        li.onclick = function () {
            var val = parseInt(1);
            _this.curPage = val;
            _this.init();
        };
    },
    //上一页
    lastPage: function() {
        var _this = this;
        var li = document.createElement('li');
        li.innerHTML = '<';
        if (parseInt(_this.curPage) > 1) {
            li.onclick = function () {
                _this.curPage = parseInt(_this.curPage) - 1;
                _this.init();
            };
        } else {
            li.className = 'disabled';
        }
        this.ul.appendChild(li);
    },
    //分页
    getPages: function() {
        var pag = [];
        if (this.curPage <= this.pageTotal) {
            if (this.curPage < this.pageSize) {
                //当前页数小于显示条数
                var i = Math.min(this.pageSize, this.pageTotal);
                while (i) {
                    pag.unshift(i--);
                }
            } else {
                //当前页数大于显示条数
                var middle = this.curPage - Math.floor(this.pageSize / 2),
                    //从哪里开始
                    i = this.pageSize;
                if (middle > this.pageTotal - this.pageSize) {
                    middle = this.pageTotal - this.pageSize + 1;
                }
                while (i--) {
                    pag.push(middle++);
                }
            }
        } else {
            console.error('当前页数不能大于总页数');
        }
        if (!this.pageSize) {
            console.error('显示页数不能为空或者0');
        }
        return pag;
    },
    //下一页
    nextPage: function() {
        var _this = this;
        var li = document.createElement('li');
        li.innerHTML = '>';
        if (parseInt(_this.curPage) < parseInt(_this.pageTotal)) {
            li.onclick = function () {
                _this.curPage = parseInt(_this.curPage) + 1;
                _this.init();
            };
        } else {
            li.className = 'disabled';
        }
        this.ul.appendChild(li);
    },
    //尾页
    finalPage: function() {
        var _this = this;
        var li = document.createElement('li');
        li.innerHTML = '尾页';
        this.ul.appendChild(li);
        li.onclick = function () {
            var yyfinalPage = _this.pageTotal;
            var val = parseInt(yyfinalPage);
            _this.curPage = val;
            _this.init();
        };
    },
    //是否支持跳转
    showSkipInput: function() {
        var _this = this;
        var li = document.createElement('li');
        li.className = 'totalPage';
        var span1 = document.createElement('span');
        span1.innerHTML = '跳转到';
        li.appendChild(span1);
        var input = document.createElement('input');
        input.setAttribute("type","number");
        input.onkeydown = function (e) {
            var oEvent = e || event;
            if (oEvent.keyCode == '13') {
                var val = parseInt(oEvent.target.value);
                if (typeof val === 'number' && val <= _this.pageTotal && val>0) {
                    _this.curPage = val;
                }else{
                    alert("请输入正确的页数 !")
                }
                _this.init();
            }
        };
        li.appendChild(input);
        var span2 = document.createElement('span');
        span2.innerHTML = '页';
        li.appendChild(span2);
        this.ul.appendChild(li);
    },
    //是否显示总页数,每页个数,数据
    showPageTotal: function() {
        var _this = this;
        var li = document.createElement('li');
        li.innerHTML = '共&nbsp' + _this.pageTotal + '&nbsp页';
        li.className = 'totalPage';
        this.ul.appendChild(li);
        var li2 = document.createElement('li');
        li2.innerHTML = '每页&nbsp' + _this.pageLength + '&nbsp条';
        li2.className = 'totalPage';
        this.ul.appendChild(li2);
        var li3 = document.createElement('li');
        li3.innerHTML = '共&nbsp' + _this.dataTotal + '&nbsp条数据';
        li3.className = 'totalPage';
        this.ul.appendChild(li3);
        var li4 = document.createElement('li');
        li4.innerHTML =  _this.curPage + "/" + _this.pageTotal;
        li4.className = 'totalPage';
        this.ul.appendChild(li4);
    }
};
  1. 实例化分页组件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let pageInstance = new Pagination({
    id: 'pagination',
    curPage:1,  // 初始页码,不填默认为1
    draw: 0,    // 当前渲染次数统计
    pageLength: 10,  //每页多少条
    pageSize: 5, //分页个数,不填默认为5
    showPageTotalFlag:true, //是否显示数据统计,不填默认不显示
    showSkipInputFlag:true, //是否支持跳转,不填默认不显示
    ajaxParam: {    //分页ajax
        url: 'https://www.easy-mock.com/mock/5cc6fb7358e3d93eff3d812c/page',
        type: "get",
    }
})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
关于原生typescript实现todolist
我是歌谣 最好的种树是十年前 其次是现在 今天继续给大家带来的是原始typescript的讲解
爱学习的前端歌谣
2023/10/18
1570
关于原生typescript实现todolist
自实现jQuery版分页插件
本篇博客的分页插件是在2017-11-10 的一篇博客的基础上改造的(原博客地址:原生js版分页插件),主要是优化了分页按钮的排列和显示样式,取消首页和末页的箭头按钮,改为数字按钮,并始终把它们分别固定放置在上一页按钮的后面和下一页按钮的前面。另外在DOM操作上,用的是jQuery,当然如果不想使用jQuery的话,也可以很容易的改成原生js。下面直接贴出代码。 1、paging.js var tableStyle = ".page {font-size: 14px;background-color
用户1174387
2018/05/28
2.2K0
vue实现分页组件
分页需要的字段:当前页(curPage),每页大小(pageSize),总页数(total) 作为一个组件,所以以上这些参数最好是从父组件传递过来,可以如下定义:
陨石坠灭
2018/10/19
1.4K0
vue实现分页组件
Javaweb08-Ajax项目-分页条件查询 + 增删改
href='javascript:void(0);' 取消a标签的href属性;
化羽羽
2022/10/28
4.7K0
Web前端学习 第3章 JavaScript基础教程15 DOM操作
在html中我们有一个h1标签和一个按钮,h1标签内已经有了一段文本。当我们点击按钮的时候,在h1标签中插入“hello world” 示例代码如下:
学习猿地
2020/06/17
6640
前后台交互经常使用的技术汇总(后台:Java技术,前台:Js或者Jquery)
该文章介绍了如何通过Java代码方式实现微信支付功能。主要包括了创建订单、查询订单、取消订单和退款订单等功能。同时,也介绍了如何通过Java代码实现后台服务器与微信服务器之间的交互,包括获取openid、生成二维码、发起请求和接收响应等功能。此外,还介绍了如何通过Java代码实现微信支付功能,包括创建订单、查询订单、取消订单和退款订单等功能。
别先生
2018/01/02
5.3K0
前后台交互经常使用的技术汇总(后台:Java技术,前台:Js或者Jquery)
Java分页显示(旅游线路)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115202.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
7590
超级详细:一个漂亮的Vue分页器组件的实现
2、在分页器组件计算属性computed中计算总共多少页/最后一页 - this.total / this.pageSize
打不着的大喇叭
2024/03/11
1.7K0
超级详细:一个漂亮的Vue分页器组件的实现
angularjs自定义指令实现分页插件
由于最近的一个项目使用的是angularjs1.0的版本,涉及到分页查询数据的功能,后来自己就用自定义指令实现了该功能。现在单独做了个简易的小demo,主要是为了分享自己写的分页功能。注:本实例调用的
用户1174387
2018/01/17
3.2K0
angularjs自定义指令实现分页插件
如果后端API一次返回10万条数据,前端应该如何处理?
最近,我的一位朋友在面试时被问到这个问题。这个问题其实是考察面试者对性能优化的理解,涉及的话题很多。下面我就和大家一起来分析一下这个问题。 创建服务器 为了方便后续测试,我们可以使用node创建一个简单的服务器。 服务器端代码: const http = require('http') const port = 8000; let list = [] let num = 0 // create 100,000 records for (let i = 0; i < 100_000; i++) {   n
程序猿DD
2022/06/16
1.5K0
如果后端API一次返回10万条数据,前端应该如何处理?
Power BI表格高级交互:分页浏览
当行数较多时,Power BI内置表格只能滚动条向下浏览。借助HTML,我们可以实现分页浏览。下图右下角显示了页码,点击任意数字即可跳转:
wujunmin
2025/04/02
580
Power BI表格高级交互:分页浏览
面向对象编程(随机点名)
1.名字数据 <script type="text/javascript" id="data"> /* 张波 李晓新 梅斌 葛培 邓浩良 李文杰 杨浩然 陈泓鑫 曾令禹 吕英扩 谭精华 林雄 伍雄辉 刘锋 张扬 张钊铭 杨朝政 邓思丽 叶富雄 李欣仲 */ </script> 2.面向对象 <script
天天_哥
2018/09/29
7330
vue 实现分页组件(重点)
使用方法:在父组件中模板中引入 <Pagination :config="pageConfig" @currentPage="handCurrenPage"></Pagination>
软件小生活
2021/11/02
1.3K0
原生js版分页插件
之前我在自己的博客里发表了一篇用angularJs自定义指令实现的分页插件,今天简单改造了一下,改成了原生JavaScript版本的分页插件,可以自定义一些简单配置,特此记录下来。如有不足之处,欢迎指出。 本插件可以自定义的功能:   1. 可初始化每页条数,以及重新选择每页条数   2.自定义首末页、上下页按钮的显示内容(是:<<、  >>、  < 、  >    还是:首页、末页、上一页、下一页)   3.设置当前页在一定范围时,是否显示省略号按钮   4.自定义当前页按钮与省略号按钮之间显示的数字按钮
用户1174387
2018/01/17
32.9K1
原生js版分页插件
原生JS TitleTip
自用笔记:本文属于自用笔记,不做详解,仅供参考。在此记录自己已理解并开始遵循的前端代码规范。What How Why
Marco爱吃红烧肉
2021/07/23
6.4K0
VUE开发一个组件——Vue 分页组件
想要快速开始的,请向下看。如果想理解源码的,可以直接跳过“快速开始”, 到“源码解读”
Javanx
2019/09/04
6520
VUE开发一个组件——Vue 分页组件
javascript本地分页
注意:本地分页适用于数据量小的地方,如果数据量大,不建议使用本地分页 var iTable = document.getElementById("iTable"); var rows = iTable.rows.length; var pageSize = 3;//每页显示条数 var pageNum = 0;//总页数 var current = 1; if(rows/pageSize > parseInt(rows/pageSize)){ pageNum = parseInt(rows/pa
Petrochor
2022/06/07
3460
原生分页查询原理步骤解析
    分页查询则是在页面上将本来很多的数据分段显示,每页显示用户自定义的行数。可提高用户体验度,     同时减少一次性加载,内存溢出风险。
上分如喝水
2021/08/16
1.3K0
原生分页查询原理步骤解析
JavaWeb学习-案例练习-图书管理后台- 9 -分页操作
前面一篇完成了多条件的查询,这篇开始学习分页,很多网页是默认显示20条数据,想看更多数据,就通过点击下一页的方式实现。这篇就来模拟这个分页实现过程。
凯哥Java
2019/07/06
7490
day39_Spring学习笔记_07_CRM_03
  /day36_06_Spring_crm/WebRoot/WEB-INF/pages/coursetype/listCourse.jsp
黑泽君
2018/10/11
1.5K0
相关推荐
关于原生typescript实现todolist
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档