虽然写的很烂,但至少全部都是自己写的,因为这个没有固定的顺序,所以就没有封装,如果你技术好的话,可以你写的分享给我,谢谢。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>原生JS实现分页效果</title>
<style>
body{
margin:100px 200px;
}
#page{
margin:20px 0;
}
#page>#pre,#page>#next{
display:inline-block;
height: 34px;
line-height:34px;
padding: 0 18px;
border: 1px solid #e1e2e3;
text-decoration:none;
}
.list{
display:inline-block;
}
.list a{
text-decoration:none;
padding:0 5px;
}
.list a.current{
color:red;
}
</style>
</head>
<body>
<section id="box"></section>
<div id="page">
<a href="javascript:;" id="pre">上一页</a>
<div class="list"></div>
<a href="javascript:;" id="next">下一页</a>
</div>
</body>
</html>
<script>
'use strict'
// 获取元素
let domBox = document.getElementById("box");
let domPage = document.getElementById("page");
let domList = document.querySelector(".list");
let preNum = 0;

// 模拟数据
let arrJson = [
{title:'title_1',content:'Content_1'},
{title:'title_2',content:'Content_2'},
{title:'title_3',content:'Content_3'},
{title:'title_4',content:'Content_4'},
{title:'title_5',content:'Content_5'},
{title:'title_6',content:'Content_6'},
{title:'title_7',content:'Content_7'},
{title:'title_8',content:'Content_8'},
{title:'title_9',content:'Content_9'},
{title:'title_10',content:'Content_10'}
];
let jsonLen = arrJson.length;

// 设置规则
let each = 3;
let page = Math.ceil(jsonLen / each);

// 设置内容
for(let i=0;i<each;i++){
let domP = '<div>';
domP += '<h1>'+ arrJson[i].title +'</h1>';
domP += '<p>'+ arrJson[i].content +'</p>';
domP += '</div>'
domBox.innerHTML += domP;
}

// 设置列表页数
for(let i=0;i<page;i++){
let domA = document.createElement('a');
domA.href = 'javascript:;';
domA.innerHTML = i + 1;
domList.insertBefore(domA,null);
}
// 获取元素
let domListChild = domList.children;
// 获取页数
let domListLen = domListChild.length;

// 记录上一次单击的元素
let preDom = domList.children[0];
preDom.className = 'current';

// 切换页
domList.addEventListener('click',function(e){
// 获取目标元素
let target = e.target;
// 获取目标元素的标签名,并统一转换成小写
let targetName = target.nodeName.toLocaleLowerCase();
if(targetName==='a'){
// 添加class
preDom.className = '';
target.className = 'current';
// 改变当前单击的元素。
preDom = target;
// 改变当前元素索引
preNum = target.innerHTML-1;

// 先清空上个页面的内容
domBox.innerHTML = '';
// 因为顺序在1,2,3的时候没有规则,所以进行了判断。
if(target.innerHTML!=='1'){
if(target.innerHTML==='2'){
// 遍历每页的条数,并将内容添加到domBox中。
for(let i=0;i<each;i++){
let arrJsonCurrent = arrJson[i-1+(target.innerHTML*(each-1))];
if(arrJsonCurrent==null){break;}
let domP = '<div>';
domP += '<h1>'+ arrJsonCurrent.title +'</h1>';
domP += '<p>'+ arrJsonCurrent.content +'</p>';
domP += '</div>';
domBox.innerHTML += domP;
}
}else if(target.innerHTML==='3'){
for(let i=0;i<each;i++){
let arrJsonCurrent = arrJson[i+(target.innerHTML*(each-1))];
if(arrJsonCurrent==null){break;}
let domP = '<div>';
domP += '<h1>'+ arrJsonCurrent.title +'</h1>';
domP += '<p>'+ arrJsonCurrent.content +'</p>';
domP += '</div>';
domBox.innerHTML += domP;
}
}else{
for(let i=0;i<each;i++){
let arrJsonCurrent = arrJson[i + (target.innerHTML-each) +(target.innerHTML*(each-1))];
if(arrJsonCurrent==null){break;}
let domP = '<div>';
domP += '<h1>'+ arrJsonCurrent.title +'</h1>';
domP += '<p>'+ arrJsonCurrent.content +'</p>';
domP += '</div>';
domBox.innerHTML += domP;
}
}
}else{
for(let i=0;i<each;i++){
let arrJsonCurrent = arrJson[i];
if(arrJsonCurrent==null){break;}
let domP = '<div>';
domP += '<h1>'+ arrJsonCurrent.title +'</h1>';
domP += '<p>'+ arrJsonCurrent.content +'</p>';
domP += '</div>';
domBox.innerHTML += domP;
}
}
}
})

// 获取上一页和下一页元素
let pagePreDom = document.getElementById('pre');
let pageNextDom = document.getElementById('next');

// 上一页
pagePreDom.addEventListener('click',function(){
// 判断当前元素索引
if(preNum>0){
preNum --;
}
changeHtml(domBox,preNum,each);
})

// 下一页
pageNextDom.addEventListener('click',function(){
// 判断当前元素索引
if(preNum<domListLen-1){
preNum ++;
}
changeHtml(domBox,preNum,each);
})

// 改变box内容
function changeHtml(domBox,currentNum,each){
domBox.innerHTML = '';
preDom.className = '';
domListChild[currentNum].className = 'current';
preDom = domListChild[currentNum];
switch(currentNum){
case 0:
// 遍历元素
for(let i=0;i<each;i++){
let arrJsonCurrent = arrJson[currentNum+i];
if(arrJsonCurrent==null){break;}
let domP = '<div>';
domP += '<h1>'+ arrJsonCurrent.title +'</h1>';
domP += '<p>'+ arrJsonCurrent.content +'</p>';
domP += '</div>';
domBox.innerHTML += domP;
}
break;
case 1:
// 遍历元素
for(let i=0;i<each;i++){
let arrJsonCurrent = arrJson[each+i];
if(arrJsonCurrent==null){break;}
let domP = '<div>';
domP += '<h1>'+ arrJsonCurrent.title +'</h1>';
domP += '<p>'+ arrJsonCurrent.content +'</p>';
domP += '</div>';
domBox.innerHTML += domP;
}
break;
default:
// 遍历元素
for(let i=0;i<each;i++){
let arrJsonCurrent = arrJson[currentNum*each+i];
if(arrJsonCurrent==null){break;}
let domP = '<div>';
domP += '<h1>'+ arrJsonCurrent.title +'</h1>';
domP += '<p>'+ arrJsonCurrent.content +'</p>';
domP += '</div>';
domBox.innerHTML += domP;
}
break;
}
}

</script>

原生JS实现分页效果2.0(新增了上一页和下一页,添加当前元素样式)的更多相关文章

  1. 原生JS实现分页效果1.0

    不太完整,写的太急,等等加上完整注释,写起来还是有些难度的,写的有点水,后面再改进改进. <!DOCTYPE html><html lang="en">&l ...

  2. 原生js实现分页效果(带实例)

    小小插件(静态分页) 效果图: 首先实现简单功能: <!DOCTYPE html> <html> <head> <meta http-equiv=" ...

  3. 原生js显示分页效果

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. 原生js版分页插件

    之前我在自己的博客里发表了一篇用angularJs自定义指令实现的分页插件,今天简单改造了一下,改成了原生JavaScript版本的分页插件,可以自定义一些简单配置,特此记录下来.如有不足之处,欢迎指 ...

  5. 原生JS实现弹幕效果

    纯属无聊写的,可能有很多问题,欢迎批评指教. 效果图:图一是预设的一些弹幕,图二是自己发射的弹幕,效果是一样的.   首先是弹幕的位置,是要从最右滑到最左,为了防止随机高度弹幕会覆盖的问题,设置了通道 ...

  6. JS实现分页效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. React.js实现原生js拖拽效果及思考

    一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...

  8. 关于js实现分页效果的简单代码

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. 分页-jquery.page.js插件在使用时重复触发“上一页”和“下一页”操作

    HTML代码 <!-- <div class="zxf_pagediv" id="Pagination" style="display:b ...

随机推荐

  1. Django-安装篇

    前提准备:Python,PIP Python直接去官网下载并安装:https://www.python.org/download/,本机安装Python版本:Python 2.7.10 PIP:htt ...

  2. [SystemC] Setting Up the Environment

    My operating system is Ubuntu 12.04. 0. Checking Your Compilers First thing first, you will need the ...

  3. CMM能力成熟度模型

    CMM把软件企业的过程管理能力划分为5个等级: 1  .初始级:个别的.混乱无序的过程,软件缺乏定义,项目的成功严重依赖于某几个关键人员的努力.软件质量由个人的开发经验来保障. 2.可重复级 实施了基 ...

  4. 解决hadoop启动后datanode无法启动问题

    hadoop部署完成后datanode无法启动问题解决 1.检查是否有遗留的hadoop进程还在运行,如果有的话,先stop-all.sh或kill杀掉: 2.在master节点上,删除/tmp/ha ...

  5. swift的运算符

    1.什么是运算符?它有什么作用? 运算符是一种特定的符号或者表达式.它用来验证.修改.合并变量. 2.运算符有哪些? 运算符有很多,很多朋友学的很烦.这里我依据它的作用把它分为几块来介绍: a:赋值运 ...

  6. JUnit Assert方法总结

    junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类.1.assertTrue/False([String message,]boolean condi ...

  7. 状态开关按钮(ToggleButton)和开关(Switch)

    ToggleButton支持的XML属性及相关方法1.android:checked----->setChecked(boolean) ----->设置该按钮是否被选中2.android: ...

  8. [转]Git - 重写历史

    转自http://git-scm.com/book/zh/Git-%E5%B7%A5%E5%85%B7-%E9%87%8D%E5%86%99%E5%8E%86%E5%8F%B2    重写历史 很多时 ...

  9. FUND

    The Shaanxi Natural Science Plan Project of China Grant NO.: 2014JM8322

  10. PAT/进制转换习题集

    B1022. D进制的A+B (20) Description: 输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数. Input: ...