js实现页码的切换

2023-11-03

效果图

 

页面布局与样式:

<!DOCTYPE html>
<html lang="en">

	<head>
		<meta charset="UTF-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>同步课程</title>
		<!-- 字体图标 -->
		<link rel="stylesheet" href="http://at.alicdn.com/t/font_2384888_ojge9md3tr.css
    ">
		
		<!-- 引入同步课程样式 -->
		<link rel="stylesheet" type="text/css" href="../css/online.css"/>
	</head>

	<body>
		<!-- 导航菜单 -->
		<nav>
			<div class="main">
				<img src="../img/public/logo.png" alt="" class="logo">
				<ul>
					<li><a href="../index.html">首页</a></li>
					<!-- javascript:; 阻止默认行为 -->
					<li class="check"><a href="javascript:;">同步课程</a></li>
					<li><a href="javascript:;">在线练习</a></li>
					<li><a href="javascript:;">精品课程</a></li>
				</ul>
				<div class="search">
					<div class="left">课程<i class="iconfont icon-down"></i>
					</div>
					<input type="text" placeholder="搜索感兴趣的内容">
					<img src="../img/public/search.png" alt="">
				</div>
				<div class="login">
					<a href="javascript:;">登陆</a>
					/
					<a href="javascript:;">注册</a>
				</div>
				<div class="user">
					<img src="../img/login/user.png" alt="">
					<div class="userlist">
						<ul>
							<li>我是用户名</li>
							<li>课程中心</li>
							<li>订单中心</li>
							<li>资金管理</li>
							<li>个人中心</li>
							<li class="out">退出登陆</li>
						</ul>
					</div>
				</div>
			</div>
		</nav>

		<!-- 主体内容 -->
		<main>
			<div class="row">
				<div class="left">按省份选择</div>
				<div class="right">
					<span>省份<i class="iconfont icon-down"></i></span>
					<span>城市<i class="iconfont icon-down"></i></span>
				</div>
			</div>
			<div class="row">
				<div class="left">热门城市</div>
				<div class="right">
					<ul>
						<li><a>北京</a></li>
						<li><a>上海</a></li>
						<li><a>江苏</a></li>
						<li><a>济南</a></li>
						<li><a>河南</a></li>
						<li><a>天津</a></li>
						<li><a>沈阳</a></li>
						<li><a>石家庄</a></li>
					</ul>
				</div>
			</div>
			<div class="row">
				<div class="left">按年级选择</div>
				<div class="right">
					<ul>
						<li><a>大班</a></li>
						<li><a>中班</a></li>
						<li><a>一年级</a></li>
						<li><a>二年级</a></li>
						<li><a>三年级</a></li>
						<li><a>四年级</a></li>
						<li><a>五年级</a></li>
						<li><a>六年级</a></li>
						<li><a>初一</a></li>
						<li><a>初二</a></li>
						<li><a>初三</a></li>
						<li><a>高一</a></li>
						<li><a>高二</a></li>
						<li><a>高三</a></li>
					</ul>
				</div>
			</div>
			<div class="row">
				<div class="left">按学科选择</div>
				<div class="right">
					<ul class="fenlei">
						<li obj="1"><a class="active">全部</a></li>
						<li obj="yuwen"><a>语文</a></li>
						<li obj="shuxue"><a>数学</a></li>
						<li obj="english"><a>英语</a></li>
						<li obj="shengwu"><a>生物</a></li>
						<li obj="lishi"><a>历史</a></li>
						<li obj="zhengzhi"><a>政治</a></li>
						<li obj="wuli"><a>物理</a></li>
					</ul>
				</div>
			</div>
			<div class="row">
				<div class="left">按版本选择</div>
				<div class="right">
					<ul>
						<li><a class="active">人教版</a></li>
						<li><a>沪教版</a></li>
						<li><a>苏教版</a></li>
						<li><a>浙教版</a></li>
						<li><a>外研版</a></li>
						<li><a>人教版</a></li>
						<li><a>人教版</a></li>
					</ul>
				</div>
			</div>
			<div class="lesson">
				<ul>
					<!-- <li>
						<div class="top">
							<img src="../img/online/banner1-1.png" alt="" class="m">
							<p>1100人在学习</p>
						</div>
						<div class="bottom">
							<div class="left">
								<span>人教版语文第一节课程内容讲解</span>
								<span class="time">23课时</span>
							</div>
							<div class="right">免费学习</div>
						</div>
					</li> -->
				</ul>
			</div>

			<div class="pageNum">
			<!-- 	<button class="active">上一页</button>
            <ul>
                <li class="active">1</li>
                <li>2</li>
                <li>3</li>
                <li>4</li>
                <li>5</li>
                <li>6</li>
                <li>7</li>
                <li>8</li>
           
            <button class="active">下一页</button> -->
			</div>
		</main>

		<footer>
			<div class="cont">
				<div class="main">
					<p>
						首页 | 关于我们 | 加入我们 | 合作专区 | 联系我们 | AI开放平台 | 意见反馈 | 漏洞提交 | 隐私政策 | 版权声明 | 反盗链声明 | 网上有害信息举报 | 备案公示 |
						营业执照
						| 教师资格证公示

					</p>
					<p>
						京ICP备 13030888号 Copyright © 2014-2019 行者信息科技(北京)有限公司 | 地址:北京市新华区马当路388号C座 | 电话:010-66666666 |
						京公网安备
						01010102002533号
					</p>
					<p>
						京网文〔2018〕4086-308号 | 网络文化经营许可证:沪网文[2018]4086-308号 | 增值电信业务经营许可证:京B2-20150021 |
						食品经营许可证:JY13101140088888
					</p>
					<p>医疗器械经营许可证:京嘉食药监械经营许20188008号 | 互联网药品信息服务资格证书:(京)-经营性-2018-0011 |</p>
				</div>
			</div>
		</footer>
		<!-- 引入数据 -->
		<script src="../data/onlinedata.js" type="text/javascript" charset="utf-8"></script>
		<!-- 常用方法库 -->
		<script src="../utils/utils.js" type="text/javascript" charset="utf-8"></script>
		<!-- 引入同步课程js -->
		<script src="../js/online.js" type="text/javascript" charset="utf-8"></script>
	</body>

</html>

外部css样式online.css:

@import 'public.css';
.clearfix {
  display: block;
  content: '';
  clear: both;
}
nav {
  width: 100%;
  height: 80px;
  background: #fff;
  box-shadow: 0 2px 3px #dad6d6;
  vertical-align: top;
}
nav .main {
  width: 1180px;
  margin: 0 auto;
}
nav .main ul li:hover {
  background: #80C4AE;
  color: #fff;
}
nav .main ul li:hover a {
  color: #fff;
  font-size: 16px;
}
nav .logo {
  width: 179px;
  height: 53px;
  margin: 13px 0 14px 0;
}
nav ul {
  display: inline-block;
  margin-left: 120px;
  border: none;
  font-size: 0;
}
nav ul li {
  display: inline-block;
  width: 80px;
  height: 80px;
  line-height: 80px;
  margin-right: 17px;
  text-align: center;
}
nav ul li a {
  color: #333;
  font-size: 16px;
}
nav ul li:last-child {
  margin-right: 0;
}
nav ul .check {
  background: #80C4AE;
  color: #fff;
}
nav ul .check a {
  color: #fff;
  font-size: 16px;
}
nav div.search {
  display: inline-block;
  margin-left: 120px;
  border: 1px solid #80C4AE;
  border-radius: 3px;
  width: 280px;
  height: 36px;
  text-align: center;
  font-size: 0;
  padding: 0;
  overflow: hidden;
  vertical-align: middle;
  position: relative;
}
nav div.search .left {
  width: 69px;
  height: 36px;
  border-right: 1px solid #80C4AE;
  font-size: 14px;
  text-align: center;
  line-height: 36px;
  float: left;
  color: #80C4AE;
  padding: 0;
}
nav div.search .left i {
  margin-left: 6px;
  font-size: 5px;
}
nav div.search input {
  border: none;
  outline: none;
  display: inline-block;
  height: 36px;
  text-align: center;
  font-weight: 400;
  font-size: 14px;
}
nav div.search img {
  width: 20px;
  height: 20px;
  position: absolute;
  right: 7px;
  top: 8px;
}
nav .login {
  margin-left: 24px;
  display: inline-block;
  color: #80C4AE;
  font-size: 14px;
}
nav .user {
  display: inline-block;
  margin-left: 24px;
  display: none;
}
nav .user img {
  width: 36px;
  height: 36px;
  border-radius: 50%;
}
nav .main .user {
  position: relative;
}
nav .main .user .userlist {
  width: 122px;
  height: 269px;
  background: url('../img/login/jx.png') no-repeat;
  background-size: cover;
  position: absolute;
  top: 35px;
  right: -15px;
  display: none;
  z-index: 99999;
}
nav .main .user .userlist ul {
  width: 122px;
  height: 100%;
  padding-top: 30px;
  margin-left: 0;
}
nav .main .user .userlist ul li {
  font-size: 16px;
  color: #333;
  line-height: 30px;
  height: 40px;
  text-align: center;
  width: 100%;
  cursor: pointer;
}
nav .main .user .userlist ul li:hover {
  background: none;
}
nav .main .user .userlist ul li:last-child {
  color: #666;
}
nav .main .user:hover .userlist {
  display: block;
}
footer {
  width: 100%;
  height: 264px;
  background: #333;
  margin-top: 36px;
  padding-top: 87px;
}
footer .cont {
  width: 1180px;
  height: 100%;
  margin: 0 auto;
}
footer .cont .main {
  width: 1153px;
  height: 90px;
  color: #ccc;
  font-size: 14px;
  line-height: 18px;
  text-align: center;
  margin: 0 auto;
}
footer .cont .main p {
  margin-top: 5px;
}
.pos {
  width: 100%;
  height: 100%;
  position: fixed;
  top: 0;
  left: 0;
  background: rgba(0, 0, 0, 0.2);
  display: none;
  z-index: 99999999;
}
.pos .login {
  width: 520px;
  height: 522px;
  background: #FFFFFF;
  border-radius: 4px;
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  right: 0;
  margin: auto;
  text-align: center;
  padding-top: 30px;
}
.pos .login span.close {
  position: absolute;
  right: 25px;
  top: 25px;
  color: #999;
  z-index: 9999;
  font-size: 20px;
}
.pos .login img {
  width: 136px;
  height: 40px;
  margin-bottom: 46px;
}
.pos .login ul {
  padding-left: 20px;
}
.pos .login ul::after {
  display: block;
  content: '';
  clear: both;
}
.pos .login ul li {
  width: 134px;
  height: 1px;
  float: left;
  border-top: 1px solid #ececec;
  margin-top: 12px;
}
.pos .login ul li.phone {
  float: left;
  width: 162px;
  height: 25px;
  font-size: 18px;
  font-weight: 400;
  color: #333333;
  line-height: 25px;
  border: none;
  margin: 0 18px;
  margin-bottom: 21px;
}
.pos .login input {
  display: block;
  margin-left: 110px;
  width: 300px;
  height: 40px;
  border-radius: 4px;
  border: 1px solid #80C4AE;
  padding-left: 24px;
  margin-bottom: 20px;
}
.pos .login .loginbtn {
  width: 300px;
  height: 40px;
  border-radius: 4px;
  border: 1px solid #80C4AE;
  background: #74C6B3;
  color: #fff;
  text-align: center;
  font-size: 16px;
  outline: none;
  margin-bottom: 10px;
}
.pos .login p {
  width: 300px;
  margin: 0 auto;
  margin-bottom: 36px;
}
.pos .login p::after {
  display: block;
  content: '';
  clear: both;
}
.pos .login p span {
  display: inline-block;
  color: #333;
  font-size: 12px;
}
.pos .login p span:first-child {
  float: left;
}
.pos .login p span:last-child {
  float: right;
}
.pos .login p span a {
  font-size: 12px;
  color: #74C6B3;
}
.pos .login p.getCenter {
  display: block;
}
.pos .login p.getCenter img {
  width: 36px;
  height: 36px;
  border-radius: 50%;
}
.pos .login p.getCenter img:nth-child(2) {
  margin-left: 30px;
  margin-right: 30px;
}
main {
  width: 1180px;
  margin: 0 auto;
  margin-top: 22px;
}
main .row {
  min-height: 60px;
  line-height: 40px;
  color: #333;
  font-size: 16px;
  vertical-align: middle;
  width: 1180px;
  height: auto;
}
main .row .left {
  float: left;
  font-weight: Semibold;
  margin-right: 10px;
  color: #222;
  width: 80px;
}
main .row .right {
  float: left;
  width: 1090px;
}
main .row .right span {
  width: 180px;
  height: 40px;
  border: 1px solid #80C4AE;
  border-radius: 4px;
  display: inline-block;
  padding-left: 18px;
  color: #666;
  position: relative;
  font-size: 14px;
  margin-left: 22px;
  cursor: pointer;
}
main .row .right span i {
  color: #80C4AE;
  position: absolute;
  right: 13px;
}
main .row .right ul {
  margin-left: 35px;
}
main .row .right ul li {
  display: inline-block;
  margin-right: 50px;
  color: #666;
  width: 52px;
  text-align: center;
  font-size: 14px;
  box-sizing: border-box;
  cursor: pointer;
}
main .row .right ul li a.active {
  background: #80C4AE;
  color: #fff;
  border-radius: 4px;
  padding: 3px 5px;
}
main .row::after {
  display: block;
  content: '';
  clear: both;
}
main .lesson {
  width: 1180px;
  margin: 20px auto 0;
}
main .lesson ul li {
  width: 380px;
  height: 256px;
  box-shadow: 0 2px 5px #dad6d6;
  background: #fff;
  position: relative;
  overflow: hidden;
  margin: 0 20px 20px 0;
  float: left;
  cursor: pointer;
}
main .lesson ul li:nth-child(3n) {
  margin-right: 0;
}
main .lesson ul li .top {
  width: 380px;
  height: 196px;
  vertical-align: top;
  overflow: hidden;
}
main .lesson ul li .top img.m {
  width: 380px;
  height: 196px;
}
main .lesson ul li .top > p {
  position: absolute;
  bottom: 60px;
  left: 0;
  width: 100%;
  height: 33px;
  line-height: 33px;
  font-size: 14px;
  background: #000000;
  color: #fff;
  padding-left: 10px;
  opacity: 0.3;
}
main .lesson ul li .bottom {
  width: 100%;
  height: 62px;
  overflow: hidden;
  line-height: 20px;
  font-size: 14px;
  color: #333;
  margin-top: 7px;
  padding-left: 14px;
}
main .lesson ul li .bottom .left {
  float: left;
}
main .lesson ul li .bottom .left span {
  display: block;
}
main .lesson ul li .bottom .left span.time {
  margin-top: 5px;
  font-size: 14px;
  line-height: 17px;
  color: #7A7A7A;
}
main .lesson ul li .bottom .right {
  float: right;
  margin-top: 12px;
  margin-right: 14px;
  width: 86px;
  height: 30px;
  line-height: 30px;
  font-size: 16px;
  color: #fff;
  background: #74C6B3;
  text-align: center;
  border-radius: 4px;
}
main .lesson ul::after {
  display: block;
  content: '';
  clear: both;
  zoom: 1;
}
main .pageNum {
  width: 1180px;
  height: 40px;
  margin: 0 auto;
  margin-top: 20px;
  text-align: center;
}
main .pageNum ul {
  text-align: center;
  line-height: 25px;
  font-size: 18px;
  display: inline-block;
}
main .pageNum ul li {
  display: inline-block;
  width: 37px;
  height: 40px;
  padding: 9px 14px 6px;
  color: #333;
  background: #ededed;
  border-radius: 4px;
  font-family: PingFangSC-Semibold, PingFang SC;
  margin-right: 12px;
}
main .pageNum ul li.active {
  background: #80C4AE;
  color: #fff;
}
main .pageNum button {
  width: 91px;
  height: 40px;
  outline: none;
  border: none;
  background: #ededed;
  font-size: 18px;
  color: #a4a4a4;
  padding: 9px 19px 6px 18px;
  border-radius: 4px;
  margin: 0 28px;
  font-family: PingFangSC-Semibold, PingFang SC;
}
main .pageNum button.active {
  color: #333;
}
main .pageNum button:last-child {
  margin-left: 8px;
}

公共样式public.css:

body,ol,ul,h1,h2,h3,h4,h5,h6,p,th,td,dl,dd,form,fieldset,legend,input,textarea,select{
    margin:0;
    padding: 0;
}

body{
    font:12px "微软雅黑","Arial Narrow",HELVETICA;
    background-color: #f2f2f2;
}
* {
  box-sizing: border-box;
}
ul,ol{
    list-style: none;
}

a{
    text-decoration: none;
    color:#8b8d8c;
}

em,i{
    font-style: normal;
}

b,strong{
    font-weight: normal;
}

img{
    border: none;
    vertical-align: middle;
}

input{
    outline: none;
}

textarea{
    resize: none;
}

h1,h2,h3,h4,h5,h6{
    font-weight: normal;
    font-size:16px;
}

.clearfix::after{
    content: "";
    display: block;
    clear: both;
}

.clearfix{
    zoom: 1;
}
.fl{
    float: left;
}
.fr{
    float: right;
}

后台数据用js模拟onlinedata.js:

var online = [
    {
    title: '人教版语文第一节课程内容讲解',
    src: '../img/online/banner1-1.png',
    cont: '人教版',
    time: 23,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'yuwen'
}, {
    title: '人教版数学第一节课程内容讲解',
    src: '../img/online/banner1-2.png',
    cont: '人教版',
    time: 23,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'shuxue'
}, {
    title: '人教版英语第一节课程内容讲解',
    src: '../img/online/banner1-3.png',
    cont: '人教版',
    time: 23,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'english'
}, {
    title: '人教版数学第一节课程内容讲解',
    src: '../img/online/banner1-4.png',
    cont: '人教版',
    time: 22,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'shuxue'
}, {
    title: '人教版语文第一节课程内容讲解',
    src: '../img/online/banner1-5.png',
    cont: '人教版',
    time: 33,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'yuwen'
}, {
    title: '人教版英语第一节课程内容讲解',
    src: '../img/online/banner1-6.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'english'
}, {
    title: '人教版语文第一节课程内容讲解',
    src: '../img/online/banner2-1.png',
    cont: '人教版',
    time: 33,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'yuwen'
}, {
    title: '人教版物理第一节课程内容讲解',
    src: '../img/online/banner2-2.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'wuli'
}, {
    title: '人教版化学第一节课程内容讲解',
    src: '../img/online/banner2-3.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: '化学'
}, {
    title: '人教版生物第一节课程内容讲解',
    src: '../img/online/banner2-4.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'shengwu'
}, {
    title: '人教版物理第一节课程内容讲解',
    src: '../img/online/banner2-5.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'wuli'
}, {
    title: '人教版化学第一节课程内容讲解',
    src: '../img/online/banner2-6.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'huaxue'
}, {
    title: '人教版化学第一节课程内容讲解',
    src: '../img/online/banner2-3.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: '化学'
}, {
    title: '人教版生物第一节课程内容讲解',
    src: '../img/online/banner2-4.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'shengwu'
}, {
    title: '人教版化学第一节课程内容讲解',
    src: '../img/online/banner2-3.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: '化学'
}, {
    title: '人教版生物第一节课程内容讲解',
    src: '../img/online/banner2-4.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'shengwu'
}, {
    title: '人教版英语第一节课程内容讲解',
    src: '../img/online/banner1-6.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'english'
}, {
    title: '人教版语文第一节课程内容讲解',
    src: '../img/online/banner2-1.png',
    cont: '人教版',
    time: 33,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'yuwen'
}, {
    title: '人教版物理第一节课程内容讲解',
    src: '../img/online/banner2-2.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'wuli'
}, {
    title: '人教版化学第一节课程内容讲解',
    src: '../img/online/banner2-3.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: '化学'
}, {
    title: '人教版生物第一节课程内容讲解',
    src: '../img/online/banner2-4.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'shengwu'
}, {
    title: '人教版物理第一节课程内容讲解',
    src: '../img/online/banner2-5.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'wuli'
}, {
    title: '人教版英语第一节课程内容讲解',
    src: '../img/online/banner1-6.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'english'
}, {
    title: '人教版语文第一节课程内容讲解',
    src: '../img/online/banner2-1.png',
    cont: '人教版',
    time: 33,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'yuwen'
}, {
    title: '人教版物理第一节课程内容讲解',
    src: '../img/online/banner2-2.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'wuli'
}, {
    title: '人教版化学第一节课程内容讲解',
    src: '../img/online/banner2-3.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: '化学'
}, {
    title: '人教版生物第一节课程内容讲解',
    src: '../img/online/banner2-4.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'shengwu'
}, {
    title: '人教版物理第一节课程内容讲解',
    src: '../img/online/banner2-5.png',
    cont: '人教版',
    time: 44,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'wuli'
},{
    title: '人教版语文第一节课程内容讲解',
    src: '../img/online/banner1-1.png',
    cont: '人教版',
    time: 23,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'yuwen'
},{
    title: '人教版语文第一节课程内容讲解',
    src: '../img/online/banner1-1.png',
    cont: '人教版',
    time: 23,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'yuwen'
},{
    title: '人教版语文第一节课程内容讲解',
    src: '../img/online/banner1-1.png',
    cont: '人教版',
    time: 23,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'yuwen'
},{
    title: '人教版语文第一节课程内容讲解',
    src: '../img/online/banner1-1.png',
    cont: '人教版',
    time: 23,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'yuwen'
},{
    title: '人教版语文第一节课程内容讲解',
    src: '../img/online/banner1-1.png',
    cont: '人教版',
    time: 23,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'yuwen'
},{
    title: '人教版语文第一节课程内容讲解',
    src: '../img/online/banner1-1.png',
    cont: '人教版',
    time: 23,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'yuwen'
},{
    title: '人教版语文第一节课程内容讲解',
    src: '../img/online/banner1-1.png',
    cont: '人教版',
    time: 23,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'yuwen'
},{
    title: '人教版语文第一节课程内容讲解',
    src: '../img/online/banner1-1.png',
    cont: '人教版',
    time: 23,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'yuwen'
},
{
    title: '人教版语文第一节课程内容讲解',
    src: '../img/online/banner1-1.png',
    cont: '人教版',
    time: 23,
    isFree: true,
    num: 1100,
    city: 'bj',
    level: 1,
    subject: 'yuwen'
}
];

js代码online.js:

1.获取元素

    var lessonUl = document.querySelector(".lesson ul");
    var pageNum = document.querySelector(".pageNum");

2.引入数据。online是onlinedata.js中数组的名字。

 var datas = online;

3.定义当前页、每页条数、总页数、当前页数据

总页数:数据的总条数除以每页条数,是总页数,因为数据不一定是刚好12的倍数,所以有可能出现小数,就要用Math.ceil向上取整,保证<12条数据也能独占一页。

当前页数据的公式: (当前页 - 1)*每页展示数据条数,当前页*每页展示数据条数。

datas.slice(startIndex,endIndex)  数组截取:从当前索引开始截取到结   束索引(不包含结束索引)。

datas.slice(0,12);  第1页12条

datas.slice(12,24);  第2页12条

datas.slice(24,36);  第3页12条

datas.slice(36,48);  第4页12条  (有多少条数据符合就返回多少条,没有符合的返回空数组)

 //固定当前页为1
 var curPage:1

 //每页条数
 var curPageNum = 12;

 //总页数
 var pageTotal = Math.ceil(datas.length / curPageNum);

 //当前页数据
 var arrDatas = datas.slice((curPage - 1) * curPageNum, curPage * curPageNum);

4.课程数据绑定

字符串拼接不支持换行,所以使用了模板字符串,数字1在英文状态下输入``,其间支持变量或表达式,${变量或表达式}。

 //lessonUl是数据绑定区域,arrDatas表示当页的12条数据
 lessonBindData(lessonUl, arrDatas);    
   
 function lessonBindData(ele, data) {
            //定义空字符串
            var str = "";

            //迭代当前数组
            data.forEach(function (val) {
                //字符串拼接
                str += `<li>
                    <div class="top">
                        <img src="${val.src}" alt="" class="m">
                        <p>${val.num}人在学习</p>
                    </div>
                    <div class="bottom">
                        <div class="left">
                            <span>${val.title}</span>
                            <span class="time">${val.time}课时</span>
                        </div>
                        <div class="right">免费学习</div>
                    </div>
                </li>`
            })

            //将字符串str赋值给页面中的数据绑定区域
            ele.innerHTML = str;
};

5.页码数据绑定

        //页码数据绑定 页码区域  当前页  总页数
        pageBindData(pageNum, curPage, pageTotal);

        function pageBindData(ele, cur, len) {
            //定义空数组
            var str = "";

            //拼接上一页
            str += '<button class="active">上一页</button><ul>';

            //拼接li
            for (var i = 1; i <= len; i++) {
                //如果当前页为第一页,给其class类名为active的激活样式,其它类名为空。使用了三目运算符
                str += i == cur ? '<li class="active">' + i + '</li>' : ' <li>' + i + '</li>';
            }

            //拼接下一页
            str += '</ul><button class="active">下一页</button>';

            //将字符串str赋值给页面中的页码绑定区域
            ele.innerHTML = str;
         }

6.当前页curPage不能是固定的,所以以上代码需要封装,定义形参,将页码以实参传入。

 function init(curPage) {
        //每页条数
        var curPageNum = 12;

        //总页数
        var pageTotal = Math.ceil(datas.length / curPageNum);

        //当前页数据
        var arrDatas = datas.slice((curPage - 1) * curPageNum, curPage * curPageNum);

        //课程数据绑定   ul区域  当页的12条数据
        lessonBindData(lessonUl, arrDatas);
        // console.log(lessonUl,arrDatas)

        function lessonBindData(ele, data) {
            //定义空字符串
            var str = "";

            //迭代当前数组
            data.forEach(function (val) {
                str += `<li>
                    <div class="top">
                        <img src="${val.src}" alt="" class="m">
                        <p>${val.num}人在学习</p>
                    </div>
                    <div class="bottom">
                        <div class="left">
                            <span>${val.title}</span>
                            <span class="time">${val.time}课时</span>
                        </div>
                        <div class="right">免费学习</div>
                    </div>
                </li>`
            })


            ele.innerHTML = str;
        }

        //页码数据绑定 页码区域  当前页  总页数
        pageBindData(pageNum, curPage, pageTotal);

        function pageBindData(ele, cur, len) {
            //定义空数组
            var str = "";

            //拼接上一页
            str += '<button class="active">上一页</button><ul>';

            //拼接li
            for (var i = 1; i <= len; i++) {
                str += i == cur ? '<li class="active">' + i + '</li>' : ' <li>' + i + '</li>';
            }

            //拼接下一页
            str += '</ul><button class="active">下一页</button>';

            ele.innerHTML = str;
}

7.页面初始化,先将第一页作为展示界面。将数字1作为实参,传给init的形参。

init(1);

8.实现点击页码换页、上一页、下一页的功能。

获取button及li:

var btns = ele.querySelectorAll("button");
var oLis = ele.querySelectorAll("li");

(1)页码切换  绑定事件 

this.innerHTML:点击相应li的内容,也就是数字,做取整操作后, 用init()函数重新调用,就可实现换页功能。

 for(var i = 0;i < oLis.length;i++){
    oLis[i].onclick = function(){
        init(parseInt(this.innerHTML))
    }
 }

(2)上一页

btns[0].onclick = function(){
   cur--;
   init(cur);
};

//如果当前页为第一页
if(cur <= 1){
  //清空激活样式  清除点击事件
   btns[0].className = "";
   btns[0].onclick = null;
};

(3)下一页

btns[1].onclick = function(){
    cur++;
    init(cur);
};

if(cur >= len){
   btns[1].className = "";
   btns[1].onclick = null;
}

最后完整的js代码:

    //获取元素
    var lessonUl = document.querySelector(".lesson ul");
    var pageNum = document.querySelector(".pageNum");

    //获取数据
    var datas = online;

    //页面初始化
    init(1);

    // curPage:当前页
    function init(curPage) {
        //每页条数
        var curPageNum = 12;

        //总页数
        var pageTotal = Math.ceil(datas.length / curPageNum);

        //当前页数据
        var arrDatas = datas.slice((curPage - 1) * curPageNum, curPage * curPageNum);

        //课程数据绑定   ul区域  当页的12条数据
        lessonBindData(lessonUl, arrDatas);
        // console.log(lessonUl,arrDatas)

        function lessonBindData(ele, data) {
            //定义空字符串
            var str = "";

            //迭代当前数组
            data.forEach(function (val) {
                str += `<li>
                    <div class="top">
                        <img src="${val.src}" alt="" class="m">
                        <p>${val.num}人在学习</p>
                    </div>
                    <div class="bottom">
                        <div class="left">
                            <span>${val.title}</span>
                            <span class="time">${val.time}课时</span>
                        </div>
                        <div class="right">免费学习</div>
                    </div>
                </li>`
            })
            ele.innerHTML = str;
        }

        //页码数据绑定 页码区域  当前页  总页数
        pageBindData(pageNum, curPage, pageTotal);

        function pageBindData(ele, cur, len) {
            //定义空数组
            var str = "";

            //拼接上一页
            str += '<button class="active">上一页</button><ul>';

            //拼接li
            for (var i = 1; i <= len; i++) {
                str += i == cur ? '<li class="active">' + i + '</li>' : ' <li>' + i + '</li>';
            }

            //拼接下一页
            str += '</ul><button class="active">下一页</button>';

            ele.innerHTML = str;

            //获取button及li
            var btns = ele.querySelectorAll("button");
            var oLis = ele.querySelectorAll("li");

            //页码切换  绑定事件
            for(var i = 0;i < oLis.length;i++){
                oLis[i].onclick = function(){
                    init(parseInt(this.innerHTML))
                    // console.log(this.innerHTML)  //点击的li的数字,做取整操作后, 用init()函数重新调用
                }
            }

            //上一页
            btns[0].onclick = function(){
                cur--;
                init(cur);
            }
            if(cur <= 1){
                //清空激活样式  清除点击事件
                btns[0].className = "";
                btns[0].onclick = null;
            }

            //下一页
            btns[1].onclick = function(){
                cur++;
                init(cur);
            }
            if(cur >= len){
                btns[1].className = "";
                btns[1].onclick = null;
            }
        }

    };

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

js实现页码的切换 的相关文章

随机推荐

  • vue3的slot插槽用法,`slot-scope` are deprecated

    前言 vue3的插槽使用方法发生了改变 和vue2相比较 使用vue2的写法 会报错 slot scope are deprecated vue2 上下对应 title是自己随便起的名字 1 定义一个普通的插槽 可以用div 任何标签 di
  • 用堆实现优先级队列(Priority Queue)

    1 优先级队列定义 优先级队列 priority queue 是0个或多个元素的集合 每个元素都有一个优先权 对优先级队列执行的操作有 1 查找 2 插入一个新元素 3 删除 一般情况下 查找操作用来搜索优先权最大的元素 删除操作用来删除该
  • Java Web学习笔记1

    URL格式说明 http www aspxfans com 8080 news index asp boardID 5 ID 24618 page 1 name 从上面的URL可以看出 一个完整的URL包括以下几部分 1 协议部分 该URL
  • JWT-RS256公钥和私钥创建

    摘要 最近在做ASP NET Core 微服务项目中 用到JWT RS256 创建公钥和私钥来替代原先的对称加密方式 于是在网上找一些创建秘钥的工具 搜了很多终于找到一个非常方便的工具 在这里贡献给大家 操作步骤 请看截图 工具下载链接下载
  • QuotaExceededError the quota has been exceeded --- Firefox 报错解决

    QuotaExceededError the quota has been exceeded Firefox 报错解决 Firefox 报错 QuotaExceededError the quota has been exceeded 在F
  • 联想小新Pro13解决黑苹果下麦克风不可用(曲线救国)

    众所周知 联想小新Pro13在安装黑苹果系统之后不能正常地使用麦克风的功能 这也成为了除开原装网卡无隔空和随航以外 小新Pro13在黑苹果下唯一不能使用的功能了 今天来讲一下我是如何解决这个问题的 解决思路 首先讲一下解决思路 写驱动是不会
  • DMAIC方法的五个步骤

    DMAIC是指一种数据驱动的质量战略 用于改进流程 是公司 六西格玛质量计划 的组成部分 DMAIC是五个相互关联的阶段的首字母缩写 定义 测量 分析 改进和控制 DMAIC方法旨在允许灵活性和迭代工作 它是 定义 测量 分析 改进 和 控
  • 记一次通过binlog日志恢复MySQL数据库的经历

    通过binlog日志恢复MySQL数据库的数据 一 起因 起因是我在自己服务器上搭建的博客被黑客攻击 黑客删除了我的数据库并且要求支付比特币才给我恢复 博客所有的表和数据都被清空 只留下了勒索金额和地址 如图 穷鬼如我当然是 二 恢复数据
  • 认识djiango第一章(展示日志)

    定义 Django是python的一个主流web框架 提供一站式解决方案 开发成本低 内建ORM 数据管理后台 登录认证 表单 RESTAPI等功能 适合开发中大型项目 其他web框架 Flask 轻量级 Tornado 异步 注 本次编写
  • JAVA求素数和模拟条件

    题目 牛宝在新的一年里打算扫除过去身上的坏运气 故他打算筛选出今年第1 365天中符合今年自己的那些幸运数字 在今年对应数字的那一天做特殊的事 这些数字受限于乾卦和坤卦两个卦象条件 牛宝需自己破译出来才行 你能帮助他吗 根据牛宝得知的乾坤卦
  • 【Python之路——基础回顾90列】

    基础 1 求绝对值 求绝对值或复数的模 gt gt gt abs 6 6 2 元素都为真 接受一个迭代器 如果迭代器的 所有元素 都为真 那么返回 True 否则返回 False gt gt gt all 0 1 2 3 False gt
  • 7,tcl双引号和花括号

    注 学习 交流就在博主的个人weixin公众号 FPGA动力联盟 留言或直接 博主weixin fpga start 私信 关于xilinx vivado FPGA XDC约束的所有讲解文档汇总 关于xilinxvivadoFPGAXDC约
  • BeanUtils和JSON对象复制性能对比

    对比对象 常见的BeanUtils有2个 spring有BeanUtils 浅拷贝 apache的commons也有BeanUtils 深拷贝 测试 200000次循环 测试次数 200000次循环 测试结果 依旧是20倍左右的差距 循环2
  • Windows Server 2008 的十大重要新特性

    Windows Server 2008 十项重要新技术 在微软的新产品Windows server 2008中 相比以前版本的 服务器 操作系统 又融入了十项强大的新技术 不敢说这些技术是否真的能让用户得到更好的服务 但就微软而言 体现了其
  • EDA实验:数字频率计(FREQ)设计(VHDL)

    目录 一 实验要求 二 程序源代码 2 1 CLKGEN的VHDL源程序及分析 2 2 REG32B的VHDL源程序及分析 2 3 TESTCTL的VHDL源程序及分析 2 4 FREQ的VHDL源程序及分析 三 硬件实验现象 四 对实验步
  • 【Apache Spark 】第 9 章使用 Apache Spark构建可靠的数据湖

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • unicode 和 utf8

    关于 unicode utf8 文章来自于 http blog csdn net tge7618291 article details 7599902 ascii 主要来表示英文 但是要全世界那么多语言符号文字 ascii就不够使用了 为了
  • ADFS 证书自动更新问题

    ADFS 证书自动更新问题 确定ADFS是否开启自动更新 查看ADFS属性 如何确定当前证书何时到期 文章参考地址 https docs microsoft com en us windows server identity ad fs o
  • 文件上传漏洞详解(CTF篇)

    需要了解的前置知识 1 什么是文件上传 文件上传就是通过流的方式将文件写到服务器上 文件上传必须以POST提交表单 表单中需要
  • js实现页码的切换

    效果图 页面布局与样式