原生js编写基于面向对象的分页组件_javascript技巧

本文实例为大家分享了一个基于面向对象的分页组件的具体实现代码,供大家参考,具体内容如下

文字表达有限,直接上代码了

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>一个基于面向对象的分页组件</title>
 <style>
 html,body{padding:0;margin:0;}
 p{padding:0;margin:0;}
 a{text-decoration: none}
 .Paging{overflow: hidden;}
 .Paging-item{float: left;padding: 10px 15px;background: #4caf50;color: #fff;margin-left: 5px;}
 .Paging-item-active{background: #ff568e;}
 </style>
</head>
<body>
 <div id="page"></div>
</body>
<script>
 //分页组件类
 function Paging(container,opt){
 //自定义事件
 this.eventHandlers={};
 //默认设置
 this.config={
  nowNum: 1,
  allNum: 10,
  callback: function(){}
 }
 if(opt){
  this.extend(this.config,opt);
 }
 //外层容器
 this.Box= null;
 //渲染组件
 this.render(container);
 }
 Paging.prototype={
 constructor: Paging,
 /*绑定自定义事件*/
 on: function(eventType,eventHandler){
  if(typeof this.eventHandlers[eventType] === 'undefined'){
  this.eventHandlers[eventType]= [];
  }
  this.eventHandlers[eventType].push(eventHandler);
 },
 /*触发自定义事件*/
 fire: function(eventType){
  if( this.eventHandlers[eventType] instanceof Array){
  var len= this.eventHandlers[eventType].length;
  for(var i=0;i<len;i++){
   this.eventHandlers[eventType][i]();
  }
  } 

 },
 /*渲染UI结构*/
 renderUI: function(){
  this.Box= document.createElement('div');
  this.Box.className= 'Paging';
  var nowNum= this.config.nowNum;
  var allNum= this.config.allNum;
  //当前页大于或等于4,第一页才能隐藏,总数大于5才能显示首页
  if (nowNum >=4 && allNum >=6) {
  var pageA= document.createElement('a');
  pageA.className= 'Paging-item Paging-item-start'
  pageA.href='#1';
  pageA.innerHTML= '首页';
  this.Box.appendChild(pageA);
  };
  //当前页只要不是第一页就显示上一页
  if(nowNum>=2){
  var pageA= document.createElement('a');
  pageA.className= 'Paging-item Paging-item-pre'
  pageA.href='#'+ (nowNum-1);
  pageA.innerHTML= '上一页';
  this.Box.appendChild(pageA);
  } 

  //只有5页时
  if(allNum<=5){ 

  for(var i=1;i<=allNum;i++){
   var pageA= document.createElement('a');
   pageA.className= 'Paging-item'
   pageA.href= '#'+ i;
   if(nowNum==i){
   pageA.className= 'Paging-item Paging-item-active'
   pageA.innerHTML=i;
   }else{
   // pageA.innerHTML='['+ i +']';
   pageA.innerHTML=i;
   }
   this.Box.appendChild(pageA);
  } 

  }else{
  for(var i=1;i<=5;i++){
   var pageA= document.createElement('a');
   pageA.className= 'Paging-item'
   pageA.href= '#'+ (nowNum-3+i);
   //对当前页为前2页的处理
   if(nowNum === 1 || nowNum === 2){
   pageA.href= '#'+ i;
   if(nowNum === i){
    pageA.className= 'Paging-item Paging-item-active'
    pageA.innerHTML= i;
   }else{
    // pageA.innerHTML= '['+i+']';
    pageA.innerHTML= i;
   }
   }/*对当前页为后2页的处理*/else if((allNum-nowNum) ===0 || (allNum-nowNum) === 1){
   /*==
    <a href="">[6]</a>
    <a href="">[7]</a>
    <a href="">[8]</a>
    <a href="">[9]</a>
    <a href="">10</a>
   ==*/
   pageA.href= '#'+ ((allNum-5)+i);
   if((allNum-nowNum) ===0 && i===5){
    pageA.className= 'Paging-item Paging-item-active'
    pageA.innerHTML=((allNum-5)+i);
   }else if((allNum-nowNum) ===1 && i===4){
    pageA.className= 'Paging-item Paging-item-active'
    pageA.innerHTML=((allNum-5)+i);
   }else{
    // pageA.innerHTML= '['+ ((allNum-5)+i) +']'
    pageA.innerHTML= ((allNum-5)+i)
   }
   }else{
   if(nowNum === (nowNum-3+i)){
    pageA.className= 'Paging-item Paging-item-active'
    pageA.innerHTML= (nowNum-3+i);
   }else{
    // pageA.innerHTML= '['+ (nowNum-3+i) +']'
    pageA.innerHTML= (nowNum-3+i)
   }
   } 

   this.Box.appendChild(pageA);
  }
  } 

  if((allNum-nowNum) >=1){
  var pageA= document.createElement('a');
  pageA.className= 'Paging-item Paging-item-next'
  pageA.href='#'+ (nowNum+1);
  pageA.innerHTML= '下一页';
  this.Box.appendChild(pageA);
  }
  //选择7为标准,或7以下才能显示
  if((allNum-nowNum) >= 3 && allNum >= 6){
  var pageA= document.createElement('a');
  pageA.className= 'Paging-item Paging-item-end'
  pageA.href='#'+allNum;
  pageA.innerHTML= '尾页';
  this.Box.appendChild(pageA);
  } 

 },
 /*为UI绑定事件*/
 bindUI: function(){
  var self= this;
  this.config.callback(this.config.nowNum,this.config.allNum);
  //利用事件委托
  self.Box.onclick= function(e){
  var e= e || window.event;
  var target= e.target || e.srcElement;
  if(typeof e.target.getAttribute('href') === 'string'){
   var nowNum= parseInt(target.getAttribute('href').substring(1));
   // console.log(nowNum);
   self.Box.innerHTML= '';
   new Paging(null,{
   nowNum: nowNum,
   allNum: self.config.allNum,
   callback: self.config.callback
   })
  }
  return false;
  }
 },
 /*渲染UI*/
 render: function(container){
  this.renderUI();
  this.bindUI();
  if(container){
  var con= document.getElementById(container);
  con.appendChild(this.Box);
  }else{
  document.body.appendChild(this.Box);
  }
 },
 /*继承对象*/
 extend: function(obj1,obj2){
  for(attr in obj2){
  obj1[attr]= obj2[attr];
  }
 }
 }
 //初始化调用
 var page= new Paging(null,{
 nowNum: 1,
 allNum: 10,
 callback: function(nowNum,allNum){
  console.log('当前页:'+nowNum)
  console.log('总页:'+allNum)
 }
 });
</script>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索js
分页组件
分页组件、vue分页组件、react native原生组件、react 分页组件、面向组件,以便于您获取更多的相关知识。

时间: 2024-10-31 11:51:14

原生js编写基于面向对象的分页组件_javascript技巧的相关文章

原生js怎么编写基于面向对象的分页组件

    本文实例为大家分享了一个基于面向对象的分页组件的具体实现代码,供大家参考,具体内容如下     文字表达有限,直接上代码了 一个基于面向对象的分页组件undefined'){    this.eventHandlers[eventType]= [];    }    this.eventHandlers[eventType].push(eventHandler);   },   /*触发自定义事件*/   fire: function(eventType){    if( this.ev

基于Vue.js的表格分页组件_javascript技巧

一.Vue.js简介1.Vue的主要特点: (1) 简洁 (2) 轻量 (3)快速 (4) 数据驱动 (5) 模块友好 (6) 组件化(1) 简洁 下面看一段Angular的实现双向绑定的代码 // html <body ng-app="myApp"> <div ng-controller="myCtrl"> <p>{{ note }}</p> <input type="text" ng-mo

基于Vue如何封装分页组件_javascript技巧

使用Vue做双向绑定的时候,可能经常会用到分页功能 接下来我们来封装一个分页组件 先定义样式文件 pagination.css ul, li { margin: 0px; padding: 0px; } .page-bar { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-se

基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转_javascript技巧

通过原生JS,点击事件,鼠标按下.鼠标抬起和鼠标移动事件,实现3d立方体的拖动旋转,并将旋转角度实时的反应至界面上显示. 实现原理:通过获取鼠标点击屏幕时的坐标和鼠标移动时的坐标,来获得鼠标在X轴.Y轴移动的距离,将距离实时赋值给transform属性 从而通过改变transform:rotate属性值来达到3d立方体旋转的效果 HTML代码块: <body> <input type="button" class="open" value=&quo

基于React.js实现原生js拖拽效果引发的思考_javascript技巧

一.起因&思路 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖拽效果. 首先,其实拖拽效果的思路是很简单的.主要就是三个步骤: 1.onmousedown的时候,启动可拖拽事件,记录被拖拽元素的原始坐标参数. 2.onmousemove的时候,实时记录鼠标移动的距离,结合被拖拽元素第一阶段的坐标参数,计算并设置新的坐标值. 3.onmouseup的时候,关闭可拖拽事件,记录新的坐标值. 注意:这里主要是通过绝对定位的top和left来确定元素的位置

JS代码实现table数据分页效果_javascript技巧

第一个:实现的很常见很简单的显示页数翻页 效果图: •这是HTML代码,很简单滴(我好像看到了被嫌弃的小眼神) <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-"> <script src="js/jquery-...js"></script> <script src="js/demo.js

分享一个自己写的简单的javascript分页组件_javascript技巧

自己写的一个简单的分页组件,主要功能还有实现都在JS中,html页面中只用增加一个放置生成分页的DIV,并给定容器的id. html结构如下: 复制代码 代码如下: <ul class="pagination" id="pageDIV"> </ul> class="pagination" 给定了分页的样式, id="pageDIV"用于放置JS生成的分页 CSS结构如下: 复制代码 代码如下: .pag

原生JS实现美图瀑布流布局赏析_javascript技巧

自pinterest网站爆红以来,国内一度掀起"仿PIN"狂潮,诸如花瓣.蘑菇街等等.正是如此,"瀑布流"式布局受到广大网民的青睐.众多知名JS库,也相继出现"瀑布流"布局插件,譬如jQuery的Masonry插件.KISSY的waterfall插件等.今天闲来无聊,我也自己动手弄了段原生JS代码,实现了简单的"瀑布流"布局效果,当然肯定不能和以上那些优秀插件相提并论,有兴趣的朋友,可以去看看,希望能带给你或多或少的收获. 1

原生JS简单实现ajax的方法示例_javascript技巧

本文实例讲述了原生JS简单实现ajax的方法.分享给大家供大家参考,具体如下: HTML部分: <body> <input type="button" value="Ajax提交" onclick="Ajax();" /> <div id="resText" ></div> </body> 这里有个input按钮,点击会触发click事件,click事件调用Ajax(