简易前端分页组件

vue实现通用分页控件,支持前端分页、后端分页。 如果是后端做分页的话,就传递count属性值这个属性代表总数据量,需要用来计算总页数如果是前端做分页,就传递itemList属性值,这个属性表示总数据数组,根据这个数组的长度可以计算页数,根据页码可以对数组进行截取并把截取的单页数据通过自定义事件传递给父组件,父组件更新列表数据渲染itemList: {//数据列表},count: {//有值则分页功能后端实现},})通过自定义事件可以把页码或者是分页后的数据传递给父组件。 阅读详情

/**
* 分页控件JS
*
*准备工作:
* (1)引入page.css样式文件;
* (2)引入page.js脚本文件;
* (3)以及Jquery库文件
*
* 在要进行分页的页面作如下设置
* <1> 将查询form表单中的submit按钮的ID指定为submitBtn
* <2> form表单中添加两个隐藏域hidden分别存储页面号和页面尺寸
* 如:

 *   <input type="hidden" id="pageNum" name="pageNum" value="${page.pageNum}" />
 *   <input type="hidden" id="pageSize" name="pageSize" value="${page.pageSize}" />
  • <3>添加分页层,即DIV层
<div id="pageMod" class="page" _pages="${page.pages}" _pageNum="${page.pageNum}" _pageSize="10", _total="${page.total}" _ajaxParam="false">
 *   <div id="pagnation"  align="center" class="page"> </div>
 *   </div>

*
* 工作流程:
* (A)同步分页:设置参数_ajaxParam=”false”,每次点击查询按钮或者分页链接进行分页查询,都是进行的form表单同步提交,会刷新整个页面;
* 由此为带来查询条件丢失的问题,解决方法是在后台存储,查询完成后进行返回,还原页面现场;
* (B)异步分页:设置参数_ajaxParam=”true”,同时需要自己提供回调函数ajaxPageSubmit(),并处理结果
*/

/**
* 根据参数名,获取url中的参数值
*/
function getQueryParam(name)
{
     var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
     var r = window.location.search.substr(1).match(reg);
     if(r!=null){
        return  unescape(r[2]);
     }else{ 
       return null; 
     } 
}
// 因为是JS渲染分页控件,加上标识变量避免重复渲染
var isCreationFlag = false;

$(function(){

 // 分页JS 控件
 var _Nav = $('#pagnation');

 // 获取参数值:当前页面号、总页数、总记录数
 var pageNum = getQueryParam("pageNum") == null ?   $("#pageMod").attr("_pageNum") : getQueryParam("pageNum");
 var pages = $("#pageMod").attr("_pages");
 var total = $("#pageMod").attr("_total");
 //alert('pageNum =  ' + pageNum);
 if (!isCreationFlag) {
  //1.创建页面链接
  createLinks(pageNum, pages, total);


  //2.处理当前页、上一页和下一页的状态(当前页选中,上一页和下一页去除超链接属性)
  processLinkState(pageNum);


  //3.为页面链接注册点击事件
  registSplitPageEve();

  //4.置标识变量为:已创建  
  isCreationFlag = true;

 }
    /********************************* 功能函数定义 *************************************/


  /***
   * 【功能】:1.创建链接
   * @param pageNum 当前页面号
   * @param pages 总页数
   * @param total 总记录数
   */
    function createLinks(pageNum, pages, total){

     var pageTotal = parseInt(pages);
     pageNum = parseInt(pageNum);
     if (pageTotal > 1) {
      _Nav.append('<a href="javascript:;" id="prev">上一页</a>')
   }

     if (pageTotal <= 9) {  // 少于包括9个分页链接时,进行全显示
      for(var i=0;i< pageTotal;i++){
       _Nav.append('<a href="javascript:void(0);" class="numlink">'+(i+1)+'</a>');
      }
  }else{ // 分三种情形展示分页链接
   if (pageNum <= 7) {  // (1)省略号:L无,R有
    _Nav.append('<a href="javascript:void(0);" class="numlink">'+ 1 +'</a>');
    _Nav.append('<a href="javascript:void(0);" class="numlink">'+ 2 +'</a>');
    for(var i=3;i < 8;i++){
        _Nav.append('<a href="javascript:void(0);" class="numlink">'+(i)+'</a>');
       }
    _Nav.append('...');
    //_Nav.append('<a href="javascript:void(0);" class="numlink">'+(pageTotal - 1)+'</a>');
    _Nav.append('<a href="javascript:void(0);" class="numlink">'+(pageTotal )+'</a>');
   }
   else if (pageNum < pageTotal -4) { // (2)省略号:L有,R有
    _Nav.append('<a href="javascript:void(0);" class="numlink">'+ 1 +'</a>');
    //_Nav.append('<a href="javascript:void(0);" class="numlink">'+ 2 +'</a>');
    _Nav.append('...');
    for(var i=-2;i < 3;i++){
        _Nav.append('<a href="javascript:void(0);" class="numlink">'+(pageNum + i)+'</a>');
       }
    _Nav.append('...');
    //_Nav.append('<a href="javascript:void(0);" class="numlink">'+(pageTotal - 1)+'</a>');
    _Nav.append('<a href="javascript:void(0);" class="numlink">'+(pageTotal )+'</a>');
   }
   else{  // (3)省略号:L有,R无
    _Nav.append('<a href="javascript:void(0);" class="numlink">'+ 1 +'</a>');
    //_Nav.append('<a href="javascript:void(0);" class="numlink">'+ 2 +'</a>');
    _Nav.append('...');
    for(var i=6;i > 1;i--){
        _Nav.append('<a href="javascript:void(0);" class="numlink">'+(pageTotal - i)+'</a>');
       }
    _Nav.append('<a href="javascript:void(0);" class="numlink">'+(pageTotal - 1)+'</a>');
    _Nav.append('<a href="javascript:void(0);" class="numlink">'+(pageTotal )+'</a>');
   }
  }

  if (pageTotal > 1) {
     _Nav.append('<a href="javascript:;" id="next">下一页</a>');
  }
  _Nav.append('<span class="co_gray">共<font class="co_or">'+ total + '</font>个结果</span>');
}  

    /**
     * 【功能】:2.处理当前页、上一页和下一页的显示状态
     *  @param pageNum 当前页面号
     *  
     */
    function processLinkState(pageNum){
        var _Next = $('#next');
        var _Prev = $('#prev');
        var currPageNum = parseInt(pageNum);

        //高亮显示当前页
        $('.numlink').each(function(){
         if (currPageNum == parseInt($(this).text()) ) {
            $(this).addClass('current');
         }
        });

        var pages = parseInt( $("#pageMod").attr("_pages") );
        if(currPageNum == 1){
             //_Prev.hide(); _Next.show();
           _Prev.attr("href", '#').addClass("disableCss");
        }
        else if(currPageNum == pages){
            //_Prev.show();_Next.hide();
           _Next.attr("href", '#').addClass("disableCss");
        }
        else {
            //_Prev.show(); _Next.show();
        }
    }

    /**
     * 【功能】:3.注册分页查询事件:下一页、上一页、页面号点击事件
     *
     */
    function registSplitPageEve(){
        // 判断是否需要异步提交
        var ajaxParam = $("#pageMod").attr("_ajaxParam");
        var isAjax = false;
        if (ajaxParam == 'true' || ajaxParam == true ) {
           isAjax = true;
        }

        var _Next = $('#next');
        var _Prev = $('#prev');
        var _Link = $('.numlink');

        if(_Next.attr("href") != '#'){
           _Next.click(function(){
            //把将要显示的页面设置到form表单控件里
            var currPageNum = parseInt( $('.numlink.current').text() );
            var nextPageNum = currPageNum + 1;
            $("#pageNum").val(nextPageNum);
            // 提交:form的同步提交;自定义的异步提交
            pageSubmit(isAjax, nextPageNum);
           });
          }

          if(_Prev.attr("href") != '#'){
           _Prev.click(function(){
            var currPageNum = parseInt( $('.numlink.current').text() );
            var prevPageNum = currPageNum - 1;
            $("#pageNum").val(prevPageNum);
            pageSubmit(isAjax, prevPageNum);
           });
          }
         _Link.click(function(){
              var which = $(this).text();
              $("#pageNum").val(which);

              pageSubmit(isAjax, which);

          });
    }

    /**
     * 【功能】:进行分页提交
     * @param isAjax 是否异步
     * @param pageNum 页面号参数
     */
    function pageSubmit(isAjax, pageNum){
         $("#pageNum").val(pageNum);
         //进行form表单同步提交,刷新整个页面,重新渲染分页js
         if (!isAjax) {
            $("#submitBtn").click();
         }else{  // 异步提交

          // 分页JS 控件
          $('#pagnation').empty(); // 清空上次的内容
          var _Nav = $('#pagnation');

          //1.创建页面链接
          createLinks(pageNum, pages, total);

          //2.处理当前页、上一页和下一页的状态(当前页选中,上一页和下一页去除超链接属性)
          processLinkState(pageNum);

         //3.为页面链接注册点击事件
         registSplitPageEve();


         //回调函数,开发者自己定义
          var srcUrl = $("#srcUrl").val();
          ajaxPageSubmit(srcUrl);
         }
    }


})

示例:

1. 样式文件
<style type="text/css">
/*page*/
.page{
 text-align:center;
 margin:28px 0;}

.page a{
 font-size:14px;
 padding:1px 8px;
 background:#fff;
 border:1px #ccc solid;
 margin:0 5px;}

.page a.current{
 color:#fff;
 font-weight:bold;
 background:#0198f1;
 border:1px #0370cb solid;}

.page span{
 margin-left:10px;
}

.disableCss{
 text-decoration:none;
 outline:none;
 pointer-events:none;
 color:#afafaf;
 cursor:default;
}
</style>
2.页面示例
<form id="fm1">
 <input type="hidden" id="pageNum" name="pageNum" value="" />
   <!--  <input type="hidden" id="pageSize" name="pageSize" value="${page.pageSize}" /> -->
 <input type="submit" id="submitBtn" style="display:none;"/>

 <hr/><hr/>
 <div id="pageMod" class="page" _pages="14" _pageNum="7" _pageSize="10", _total="100" _ajaxParam="false">
  <div id="pagnation"  align="center" class="page"> </div>
 </div>

 </form>
使用AngularJS和jQuery分页控件实现分页功能 通过以上的代码,我们结合AngularJS和jQuery分页控件实现了一个简单的分页功能。用户可以点击页码按钮来切换页码,从而展示不同的数据项。在AngularJS应用中,我们经常需要对大量数据进行分页展示,以提升用户体验和页面加载速度。在上面的代码中,我们创建了一个AngularJS应用,并在。指令,我们可以根据当前页码的状态动态添加样式来显示当前页。函数根据当前页码计算需要展示的数据项,并返回一个子数组。// 监听当前页码的变化,更新展示的数据项。// 根据当前页码,获取需要展示的数据项。 阅读详情

相关推荐

前端领域中Bootstrap的分页组件动画

在前端开发中,分页组件是一个常见且重要的交互元素,用于将大量数据分页展示,提升用户体验。Bootstrap作为一款流行的前端框架,提供了基本的分页组件。然而,基本的分页组件缺乏动态效果,显得较为单调。本文的目的是深入探讨如何为Bootstrap的分页组件添加动画效果,以增强用户与分页组件的交互性和视觉吸引力。本文的范围涵盖了从核心概念的讲解到实际项目的应用,包括动画效果的实现原理、具体的代码实现步骤、实际应用场景的分析,以及相关学习资源和工具的推荐等方面。背景介绍。

小白菜的博客 880

前端实现el-pagination分页组件纯前端分页使用方法

又是被后端欺负的一天,做了个公司的老项目,表格分页后端没法做,那就只能前端来完成。这里我介绍两种方法,需要的自提

Lguorong的博客 6982

用 Vue.js 实现前端的分页组件

本文旨在指导读者使用 Vue.js 框架开发一个功能完善的前端分页组件。我们将覆盖从基础概念到实际实现的完整流程,包括组件设计、状态管理、事件处理和样式定制等内容。介绍分页组件的核心概念分析分页组件的设计思路详细实现步骤和代码解析探讨实际应用场景和优化方案总结和扩展思考分页(Pagination):将大量数据分割成多个页面显示的技术当前页(Current Page):用户当前正在查看的页面页大小(Page Size):每页显示的数据条目数总页数(Total Pages)

小白菜的博客 1238

【javascript】js分页控件

1 var modelPage={//分页控件 2 //调用示例 3 codeExp: function () { 4 modelPage.initPage({ 5 pagerowcount: 215,//数据总共多少条 6 pag...

weixin_30488313的博客 216

微信小程序——分页组件的创建与使用

一、创建 pagination 分页组件 1、前端页面 pagination.wxml 代码分享 2、样式 pagination.wxss 代码分享 3、逻辑 pagination.js 代码分享 二、使用 pagination 分页组件

不迁怒,不贰过。小知识,大智慧。 5601

React 分页组件简易实现指南

在React中,状态(state)是一个组件内部的私有变量,它可以保存数据并驱动组件根据数据的变化进行更新。状态是组件动态交互的核心,而状态的正确管理则是高效React应用的关键。定义状态时,我们会使用组件的构造函数(constructor)来初始化状态。例如,对于分页组件,我们可能需要一个状态来保存当前显示的页码:更新状态时,不能直接修改this.state,而应该使用setState方法,它会进行局部更新,并且可触发组件的重新渲染。

weixin_35899324的博客 769

Vue实战篇二十九:模拟一个简易留言板

前两周有位同学,在后台发私信,希望能实现一个简易的留言板,这周就带领大家来进行实战。

我的博客 3843

JavaScript实现前端分页控件

现在web注重用户体验与交互性,ajax 提交数据的方式很早就流行了,它能够在不刷新网页的情况下局部刷新数据。前端分页多是用ajax请求数据(其他方式也有比如手动构造表单模拟提交事件等)。通过js将查询参数构造好发向后台,后台处理后以特定的格式返回,多为json,比较流行处理起来也很方便。当后台数据到达后,浏览器重新渲染界面当然也包括js分页控件,如果觉得每次绘制分页控件对前端性能有影响也可以不绘制,但实现起来相对麻烦。        本人写的分页控件参考了其他网友的代码,链接忘了,控件接受四个参数或一个对象,其实是一样的对于后者只不过将四个参数放在一个对象中。pIndex:每次请求的页码,p

XPaging前端分页组件

前言 专注拖控件6年的C#程序员,迫于某种原因做起了前端开发,然后发现纯前端写起来要人命啊,所有的页面交互逻辑全是JS代码控制,写起来好难受。幸亏我JS功底深厚(自恋中……别打扰我……),很快就适应了,不然真的被搞死。 不过写到后面发现,纯JS控制用户交互,体验效果比aspx页面好多了。页面样式虽然是自己手写的,没用什么前端框架,但是用的Vue数据框架啊,然后发现Vue有组件开发模式,就想着是...

weixin_30252709的博客 184

ABAP代码检查(Code Review)

1、SLIN 扩展程序检查 也可通过(SE38工具栏->检查-扩展程序检查) 进入 2、ATC 检查 通过<SE38菜单栏-检查-ABAP测试主控室> 或事物代码SCI, 支持自定义检查变式 SCI可以配置检查变式满足特殊需求,配置对象集用于批量检查 3、通过ABAP测试主控室实现统一管理,定期检查作业和监控功能(事务代码ATC) 参考 SLIN...

u012232542的博客 6062

MOSFET开关损耗全面讲解:从原理到优化策略

深入剖析MOSFET开关损耗的产生机制,结合实际应用场景,讲解如何通过驱动设计和电路优化降低损耗,提升系统效率。重点关注mosfet在高频开关下的表现与热管理。

weixin_29476595的博客 1057

vue element-ui之分页组件的封装

为什么要封装分页组件? 分页组件用的最多的就是和表格一起,构成表格数据的翻页显示,当然也不仅限于表格,例如其它的流式加载、图片分批次加载等,都会用到分页组件。 这里以表格为例,通常我们写一个分页展示的表格,都会写一个<el-table></el-table>,然后在下面再写一个<el-pagination></el-pagination>的分页组...

qq_30307645的博客 1万+

Fastjson2 2.0.26反序列化漏洞深度剖析:从原理到PoC构造

本文深度剖析了Fastjson2在2.0.26及之前版本中存在的反序列化漏洞。该漏洞允许攻击者通过构造包含恶意TemplatesImpl对象的JSONArray,并利用BadAttributeValueExpException触发,在反序列化过程中实现远程代码执行。文章从漏洞原理、PoC构造、利用链分析到防御建议,提供了全面的技术解读,帮助开发者和安全人员理解其危害并采取应对措施。

d3e4f的博客 1048

前端vue分页组件简单好用列表分页组件, 分页器组件,用于展示页码、请求数据等 ,包含翻页。

本文将介绍如何使用Vue和Uni-app快速实现一个简单的列表分页组件和分页器组件,用于展示页码、请求数据等,并包含翻页功能。我们将通过使用uni-app插件市场提供的组件来简化开发过程,并提供详细的代码示例下载地址:https://ext.dcloud.net.cn/plugin?-- totalNum: 条目总数量 pageCount:设置分页数量 curPageNum:设置当前页-->## 快速实现前端vue分页组件简单好用列表分页组件, 分页器组件,用于展示页码、请求数据等,并包含翻页功能。

chenchuang0128的博客 1604

ICCV 2025 | 哈工大、清华等提出首个双曲学习框架:HLFormer,革新局部相关视频检索

离原点越远,代表的语义越具体(部分)。现有方法大多在传统的欧几里得空间中对视频和文本进行建模,但这往往会导致对视频内在层次结构的错误表示,从而影响检索的准确性。通过UMAP对学习到的帧嵌入进行可视化(如下图),可以观察到,来自同一时刻的视频帧在嵌入空间中聚集在一起,清晰地展示了模型对时序关系的捕捉能力。下图的双曲空间可视化进一步证实了模型的层次建模能力:离原点越近的点,代表的语义层级越高、粒度越粗糙,反之亦然。:既然文本查询描述的是视频的一部分,那么在几何表示上,文本的嵌入向量应该从属于视频的嵌入向量。

我爱计算机视觉 1076

零基础小白Coze知识普及【新手必备资料!!】

AI智能体|扣子(Coze)工作流搭建【零基础小白Coze知识普及】 1、领取100+工作流源码!复制到扣子即可直接使用 2、AI认知+9节商业智能体拆解 3、500+各行业高质量提示词 4、超低价格使用即梦文生图图生视频和banana生图

Zhima0522的博客 3249

html中js控制分页,前端页面分页组件 js

自定义前端分页组件开发场景项目数据查询页,因为可能同时存在多个列表查询,并且数据量较大,需要用到分页,这时候自己可以写一个简单的分页组件自定义组件逻辑可以翻页最基本的功能,比如数据有5页,1,2,3,4,5 点击哪个就查询哪一页的数据,点击5,就查询第5页哦数据有前后翻页功能类似''后一页的翻页功能页面数据较大时,控制页码量,设计显示方式如果数据有230条,每页10条数据,那么一共有23页但是页面...

weixin_29698641的博客 809

用python自动复制粘贴excel表里某一列的数据到另一个表中

昨天接到人事小姐姐求助减轻复制粘贴的重复工作量,分享一下代码 半路新手上路 耶 把 2.xlsx 表里的第二列 的数据复制粘贴到 test.xlsx的第一列 python3.6.2 from openpyxl import Workbook from openpyxl import load_workbook from openpyxl.writer.excel import Exc...

weixin_33854644的博客 2万+

基于elementUI分页组件实现前端分页功能

对于后端返回数据为进行分页的情况,前端可基于elementUI的分页组件实现分页效果。

m0_49969710的博客 1161

03、ZigBee 开发教程之进阶篇—CC2530无线传输质量检测

文章目录1、Packet Error Rate Tester(包错误率测试)理论分析1.1、工作流程1.2、流程图1.3、丢包、PER、RSSI计算方法2、实验详解2.1、实验目的2.2、实验设备2.3、实验现象2.4、源码分析2.5、实验步骤及现象 1、Packet Error Rate Tester(包错误率测试)理论分析 1.1、工作流程 Packet Error Rate Tester(包错误率测试) 1、启动 板载外设、射频IO、系统时钟、中断等初始化(halBoardInit();); Bas

嵌入式羊圈 1534

基于Cesium移动的天空云

天空中的云朵也算是一种天气气候的效果,它能更加逼真的反映当前的天气状况,可以是白云朵朵,也可以是乌云密布,结合其他天气效果,可以组合形成较为真实的三维可视化场景。

星云数海的博客,一个专注GIS十多年的GISer人。 446

DeepSeek与Vue.js携手:打造高效分页组件之旅

Vue.js 则是目前最受欢迎的前端框架之一,它以其简洁的语法、灵活的组件化开发模式和高效的虚拟 DOM 技术,为前端开发带来了极大的便利。Vue.js 的组件化特性使得开发者可以将页面拆分成一个个独立的、可复用的组件,每个组件都有自己的逻辑和样式,这不仅提高了代码的可维护性和可扩展性,还能有效减少代码的冗余。在开发分页组件时,Vue.js 的响应式原理能够确保数据的变化能够实时反映在页面上,实现高效的数据交互和展示。

宝码香车的博客 2749

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

三个分页组件

三个分页组件      分页功能在项目中比较常见,一般的查询数据列表展示时都要求分页,它可以有效加快网页的响应速度,不是全部查询展示出来而是展示一页的数据。大部分的js组件也自带分页功能比如:ligerUI,只要把查询出来的数据转换成需要的数据格式(xml或json)丢给它就可以自动分页。winform自带的DataGridView组件也有该功能。     实现思路:需要三个变量,Pa

yss的专栏 2586

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【VUE】实现分页组件

我们可以把这个分页组件分为三种形态第一种 总页数

m0_63300737的博客 2510

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

React 分页组件 Pagination

引言 在现代 Web 应用中,分页组件是不可或缺的一部分。无论是列表展示、搜索结果还是文章列表,分页组件都能有效提升用户体验,避免一次性加载大量数据导致的性能问题。本文将介绍如何在 React 中实现一个分页组件,从基础概念到常见问题及解决方案,帮助开发者快速上手。 基础概念 什么是分页组件? 分页组件用于将大量数据分成多...

cnzzs的博客 1687

Android仿前端分页组件pagination

最近Android原生有个需求就是做个分页组件,不用上拉加载,因为数据量太大用户喜欢前端的方式,UI主要是拼凑比较简单,主要补充了一些判断越界和数据不全的细节,记录方便以后COPY。仿前端pagination。

qq_28844947的博客 765
上一篇: WEB中配置错误页面
下一篇: JAVA容器小结1
Carlos Chan
博客等级 码龄14年 6粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值