应用样式:

分页器组件:

<template><div id="pagination"><div class="el-row"><div class="pagination el-col el-col-24"><div class="el-pagination is-background pagination"><span class="el-pagination__total">共 {{ pageInfo.total }} 条</span><buttontype="button":disabled="cur == 1":class="{ active: cur == 1 }"@click="$emit('handleCurrentChange', cur - 1)"><i class="el-icon el-icon-arrow-left"></i></button><ul class="el-pager"><liv-if="startNumAndEndNum.start > 1":class="{ active: cur == 1 }"@click="$emit('handleCurrentChange', 1)">1</li><button v-if="startNumAndEndNum.start > 2">···</button><template v-for="(page, index) in startNumAndEndNum.end"><button:key="index"v-if="page >= startNumAndEndNum.start"@click="$emit('handleCurrentChange', page)":class="{ active: cur == page }">{{ page }}</button></template><button v-if="startNumAndEndNum.end < all - 1">···</button><li:class="{ active: cur == all }"v-if="startNumAndEndNum.end < all"@click="$emit('handleCurrentChange', all)">{{ all }}</li></ul><buttontype="button":disabled="cur == all":class="{ active: cur == all }"@click="$emit('handleCurrentChange', cur + 1)"><i class="el-icon el-icon-arrow-right"></i></button><span class="el-pagination__sizes"><div class="el-select el-select--mini"><!----><div class="el-input el-input--mini el-input--suffix"><!----><el-selectv-model="pageSize"placeholder="请选择"@change="handleSizeChange"><el-optionv-for="item in options":key="item.value":label="item.label":value="item.value"></el-option></el-select><span class="el-input__suffix"><span class="el-input__suffix-inner"><iclass="el-select__caret el-input__icon el-icon-arrow-up"></i><!----><!----><!----><!----><!----></span><!----></span><!----><!----></div></div></span></div></div></div></div>
</template>
<script>
export default {//显示的声明组件name: "pagination",props: ["pageInfo"],data() {return {all: Math.ceil(this.pageInfo.total / this.pageInfo.pageSize), //, //总页数cur: this.pageInfo.currentPage, //this.pageInfo.currentPage ,//当前页码pageSize: this.pageInfo.pageSize + "条/页", // , //一页显示的数量options: [{value: "5",label: "5条/页"},{value: "10",label: "10条/页"},{value: "20",label: "20条/页"},{value: "50",label: "50条/页"}]};},methods: {// 每页数据量变化时触发方法handleSizeChange(val) {this.$emit("handleSizeChange", val);}},computed: {startNumAndEndNum() {this.cur = this.pageInfo.currentPage;this.all = Math.ceil(this.pageInfo.total / this.pageInfo.pageSize);const continues = 3;const totalPage = this.all;const pageNo = this.cur;//  先定义两个变量存储起始数字与结束数字let start = 0,end = 0;if (continues > totalPage) {start = 1;end = totalPage;} else {//  正常现象【连续页码3,但是你的总页数一定是大于3的】//  起始数字start = pageNo - parseInt(continues / 2);end = pageNo + parseInt(continues / 2);if (start < 1) {start = 1;end = continues;}//  把出现不正常的现象【end数字大于总页码】纠正if (end > totalPage) {end = totalPage;start = totalPage - continues + 1;}}return { start, end };}}
};
</script>
<style scoped>
.pagination {text-align: center;
}
.pagination button {margin: 0 5px;background-color: #f4f4f5;color: #606266;outline: none;border-radius: 2px;padding: 0 4px;vertical-align: top;display: inline-block;font-size: 13px;min-width: 35.5px;height: 28px;line-height: 28px;cursor: pointer;box-sizing: border-box;text-align: center;border: 0;
}.pagination .active {cursor: not-allowed;background-color: #409eff;color: #fff;
}
</style>

父组件:

<template><div><pagination:pageInfo="page"@handleSizeChange="handleSizeChange"@handleCurrentChange="handleCurrentChange"></div>
</template><script>
import Pagination from "./Pagination.vue";
export default {name: "dome",components: {Pagination,},data() {return {page: {total: 0,pageSize: 10,currentPage: 1}};},methods: {// 每页数据量变化时触发方法handleSizeChange(val) {this.page.pageSize = val;this.page.currentPage = 1;},// 当前页发生改变时触发的方法handleCurrentChange(val) {this.page.currentPage = val;},},
};
</script><style></style>

原生JS封装分页器组件相关推荐

  1. 原生js封装table组件

    使用原生js封装自己的table组件. 思路是通过设置参数,生成对应的表格dom; 源码如下:(初步实现) var XUi = {// table组件tableDom:{common:function ...

  2. js 封装ajax方法吗,原生JS封装ajax方法

    jquery框架的ajax方法固然好用,但是假如某天我们的项目不能引入jquery或项目需求很简单,没有很多交互功能,只需要ajax,这时引入jquery库会造成资源浪费,也会显得页面臃肿.这时我们就 ...

  3. 原生JS封装Ajax插件(同域jsonp跨域)

    2019独角兽企业重金招聘Python工程师标准>>> 抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax ...

  4. 原生Js封装的弹出框-弹出窗口-页面居中-多状态可选

    实现了一下功能: 1.title可自定义 可拖拽 2.width height可以自定义 3.背景遮罩和透明度可以自定义 4.可以自己编辑弹出框里的html 5.确定 取消按钮可选 调用方法: 1 P ...

  5. H5移动端原生JS封装附件上传服务器

    本文主要通过原生的js封装附件上传upload.js.可成功内嵌钉钉,ios和安卓端可正常使用,支持单个.多个附件上传. 一.业务需求 封装原生JS附件上传,动态创建附件列表,可对附件列表进行删除和新 ...

  6. animate用法 js原生_原生JS封装animate运动框架的实例

    如下所示: div { width: 100px; height: 100px; background-color: pink; position: absolute; left: 0; top: 5 ...

  7. 原生js封装cookie插件

    最近迷上了react,用react模拟之前的系统,做登录的时候,发现需要用到cookie,之前用的跟vue搭配的VueCookie,我就在想啊,react应该也会有相应的cookie插件吧!百度一下, ...

  8. 原生js封装十字参考线插件(一)

    需求来源: 拓扑图之机房平面图,显示机房长宽比例尺,房间内标注各种设备间距不易实现,特在机房平面图上层加一个十字参考线 横竖两条线垂直,在鼠标指针处交叉,显示鼠标指针坐标(相对机房平面图的坐标,不是相 ...

  9. 原生html中modal,基于原生JS封装的Modal对话框插件

    基于原生JS封装Modal对话框插件 原生JS封装Modal对话框插件,个人用来学习原理与思想,只有简单的基本框架的实现,可在此基础上添加更多配置项 API配置 //基本语法 let modal = ...

最新文章

  1. SpringBoot------集成MyBatis报错
  2. mysql自动编号步进值_MySQL-自动编号
  3. 【cocos2d-x】2.0升级为3.0一些常见变化纪录
  4. 势能线段树(均摊分析)
  5. 服务器内存会显示ecc么,服务器内存ecc
  6. ARM、DSP、FPGA的技术特点和区别
  7. 谈谈大型分布式网站架构技术总结
  8. 【sklearn第二十七讲】模型持久性
  9. 什么是restful api
  10. c++ 类的定义和使用
  11. 电驱产品销售准入的基本要求
  12. java时间轮定时器_基于时间轮的定时器
  13. CS:APP配套实验文件下载方法
  14. MySQL 临时表的原理以及优化手段
  15. 深入浅出 RxJS 核心原理(源码实现)
  16. 故宫买票显示服务器开小差,比春运车票还难抢的故宫灯会 预约系统直接崩溃...
  17. 2020 语音识别领域最具商业合作价值企业盘点
  18. 日语初级语法复习 Day 17 Summary(更新中)
  19. 带alpha通道四通道的图片转成rgb三通道
  20. 一年两款新品 寒武纪的研发效率为何如此高?

热门文章

  1. EXCEL VBA小白第一课:入门
  2. 质性分析软件nvivo的学习(三)
  3. Android使用青花瓷Charles抓包
  4. trafficserver安装配置
  5. ZT:老郭的《闷坐无聊偶感于怀》,力挺老郭
  6. 读完这篇,让你真正理解Redis持久化
  7. Matlab之绘图工具箱大全
  8. 前端特效CSS样式樱花
  9. PHP获取客户端请求IP地址
  10. WDA学习(9):Use an ALV TABLE in WDA