当功能比较简单,在单一html中使用vue.js分页展示数据,并未安装脚手架,或使用相关UI框架,此时需要手写一个分页器,不失为最合理最便捷的解决方案,

先看一下实现效果:

上代码:

1.简单搞一搞 CSS

[v-cloak] {
display: none;
}
#app {
text-align: center;
padding-top: 50px;
}
.pageContainer {
width: 800px;
margin: 20px auto;
text-align: center;
font-size: 14px;
color: #A3A3A3;
}
.pageContainer ul {
height: 30px;
line-height: 30px;
display: inline-block;
}
.pageContainer ul li {
width: 30px;
height: 30px;
display: inline-block;
border: 1px solid #E5E5E5;
margin: 0 5px;
}
.pageContainer ul li.actived {
background: #FF6200;
color: #ffffff;
}
.pageContainer form {
display: inline-block;
}
.pageContainer form input,
.pageContainer button {
outline: none;
padding: 0;
width: 46px;
height: 30px;
background: #ffffff;
border: 1px solid #E5E5E5;
color: #A3A3A3;
}

2.简单搞一搞 HTML

<div id="app" v-cloak>
第{{pageIndex}}页
<div v-show="pageTotalNum > 1" class="pageContainer">
<ul class="pagesInner">
<li class="page" @click="prevOrNext(-1)"><span aria-hidden="true">&lt;</span></li>
<li class="page" v-for="(item, index) in pages" :key="index" :class="{actived: item == pageIndex}" @click="selectPage(item)">
<span>{{item}}</span>
</li>
<li class="page" @click="prevOrNext(1)"><span class="fa fa-chevron-right" aria-hidden="true">&gt;</span></li>
</ul>
跳至&nbsp;
<input type="text" v-model="goToPage" style="text-align: center;">
&nbsp;页&nbsp;
button @click="handleGoToPage">确定</button>
</div>
</div>

3.重点来了~~~~

首先分析一下分页功能的实现思路:

  • 首页和尾页始终显示,

  • 我设计的分页每次最多显示5个页码(大家可根据需求自行调整),剩余部分 ... 代替,并设置不可点击,

  • 根据不同的总页数和当前页码的切换,页签展示形态有所不同,

  1. 总页数 <= 1,不显示分页器
  1. 总页数 <= 5 && 总页数 > 1,显示全部页码
  1. 总页数 > 5 && 当前页面 <= 3 , 倒数第二个页码为...,页码从计算
  1. 总页数 > 5 && 当前页面 > 3 && 当前页 < 总页数 - 3 , 正倒数第二个页码都为..., 页码以当前页码计算,±1
  1. 总页数 > 5 && 当前页面 > 3 && 当前页 > 总页数 - 3 , 正数第二个页码为..., 页码从计算

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script> <!--兼容IE -->
<script>
var app = new Vue({
el: "#app",
data: {
pageIndex: 1,
pageTotalNum: 10,
goToPage: ''
},
methods: {
prevOrNext: function(n) {
this.pageIndex += n
this.pageIndex <= 1 ? this.pageIndex = 1 : this.pageIndex > this.pageTotalNum ? this.pageIndex = this.pageTotalNum : null
},
selectPage: function(n) {
if (n === this.pageIndex) return
if (typeof n === 'string') return
this.pageIndex = n
},
handleGoToPage: function() {
this.pageIndex = this.goToPage <= 1 ? 1 : this.goToPage - 0 >= this.pageTotalNum - 0 ? this.pageTotalNum :
this.goToPage
this.goToPage = this.pageIndex
},
},
computed: {
pages: function () {
// 每次最多显示5个页码
var c = this.pageIndex
var t = this.pageTotalNum
var p = []
for (var i = 1; i <= t; i++) {
p.push(i)
}
var l = p.length
if (l <= 5) { // 总页数<=5,显示全部页码
return p
} else if (l > 5 && c <= 3) { // 总页数>5 && 当前页面<=3
return [1, 2, 3, 4, '...', t]
} else if (l > 5 && c > 3 && c <= l - 2) { // 总页数 > 5 && 当前页面 > 3 && 当前页 < 总页数 - 3
return [1, '...', c - 2, c - 1, c, '...', t]
} else { // 总页数 > 5 && 当前页面 > 3 && 当前页 > 总页数 - 3
return [1, '...', t - 3, t - 2, t - 1, t]
}
},
},
});
</script>

html+vue.js 实现分页可兼容IE的更多相关文章

  1. Vue.js实现分页

    效果图 代码 <!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/1999/ ...

  2. Vue.js报错Failed to resolve filter问题原因

    Vue.js报错Failed to resolve filter问题原因 金刚 vue Vue.js js javascript 之前使用vue.js写分页功能时,写了一个过滤器,发现一个比较奇怪的错 ...

  3. Ember.js和Vue.js对比,哪个框架更优秀?

    本文由葡萄城技术团队于博客园翻译并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. JavaScript最初是为Web应用程序创建的.但是随着前端技术的 ...

  4. 基于Vue.js的表格分页组件

    有一段时间没更新文章了,主要是因为自己一直在忙着学习新的东西而忘记分享了,实在惭愧. 这不,大半夜发文更一篇文章,分享一个自己编写的一个Vue的小组件,名叫BootPage. 不了解Vue.js的童鞋 ...

  5. Vue.js的表格分页组件

    转自:http://www.cnblogs.com/Leo_wl/p/5522299.html 有一段时间没更新文章了,主要是因为自己一直在忙着学习新的东西而忘记分享了,实在惭愧. 这不,大半夜发文更 ...

  6. vue.js 2.0实现的简单分页

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

  7. LayUI 完美兼容Vue.js

    <div id="app"> <form class="layui-form" action=""> <div ...

  8. 用vue.js的v-for,v-if,computed写一个分页样式

    在学Vue,总想写个分页,先写了一个样式. 主要看思路: 思路简单,得到总页数,判断总页数,循环. 先判断总页数是否需要分页,总页数==1页就不分了. 再判断总页数<11就不用--. 总页数&g ...

  9. Vue.js 开发实践:实现精巧的无限加载与分页功能

    本篇文章是一篇Vue.js的教程,目标在于用一种常见的业务场景--分页/无限加载,帮助读者更好的理解Vue.js中的一些设计思想.与许多Todo List类的入门教程相比,更全面的展示使用Vue.js ...

随机推荐

  1. Ajax接收int类型乱码

    在Ajax返回值类型是 "text" 的时候,接收int类型时可能会出现ၧ 解决方法:将int转为String即可 int money =100; String s = Integ ...

  2. 使用 Aria2 代替迅雷

    一.原因 迅雷下载速度一般,thunder:// 开头的链接也逐渐被 bt 链接替代. 迅雷很流氓,安装后 (尤其是 Windows 系统) 浏览器默认使用迅雷下载,对于小文件来说使用浏览器内置下载可 ...

  3. matlab中reshape 重构数组

    来源:https://ww2.mathworks.cn/help/matlab/ref/reshape.html?searchHighlight=reshape&s_tid=doc_srcht ...

  4. K8S基础

    四组基本概念 Pod/Pod控制器 Name/Namespace Label/Label选择器 Service/Ingress Pod Pod是k8s里能够被运行的最小的逻辑单元(原子单元) 1个Po ...

  5. 手把手教你用 Spring Boot搭建一个在线文件预览系统!支持ppt、doc等多种类型文件预览

    昨晚搭建环境都花了好一会时间,主要在浪费在了安装 openoffice 这个依赖环境上(Mac 需要手动安装). 然后,又一步一步功能演示,记录,调试项目,并且简单研究了一下核心代码之后才把这篇文章写 ...

  6. Git之多人协同开发

    一.获取远程库信息 1 2 3 $ git remote -v origin  https://github.com/xxxxx/node.git (fetch) origin  https://gi ...

  7. 习题3-5 谜题(Puzzle, ACM/ICPC World Finals 1993, UVa227)

    #include<stdio.h> #include<string.h> char s[5][5]; int main() { while(gets(s[0])) { int ...

  8. 在VC6.0下运行C语言程序,以及编程入门必备的常识类小知识!

    今天给大家分享在VC6.0环境下编写C语言程序的基本步骤,为初学者打开学习C语言的第一道门.具体步骤如下(如果需要软件资源,可以留言): 1)新建工作区 依次点击 文件--新建--工作区 或是Ctrl ...

  9. widows安装ffmpeg

    首先下载ffmpeg的windows版本https://ffmpeg.zeranoe.com/builds/ 解压到d盘 win+r cmd 说明成功了

  10. redis 开启AOF 持久化

    redis 开启AOF 找到redis 安装目录 打开 redis.conf  修改以下参数: appendonly  yes        (默认no,关闭)表示是否开启AOF持久化: append ...