使用Vue做出分页器(附代码)

这次给大家带来使用Vue做出分页器(附代码),使用Vue做出分页器的注意事项有哪些,下面就是实战案例,一起来看一下。

之前一直想要自己试着实现一个分页器,但是一直拖,今天写完,大概照着网易云音乐的样子来完成。这个小例子很简单,通过这个小例子,可以学习到Vue计算属性的使用,并了解到写分页器需要区分的情况。这篇文章会慢慢从头来实现这个小例子,相信你一定会学会,而且看完了我的思路之后说不定会有更棒的思路和想法!

实现的效果是这样子的:

使用Vue做出分页器(附代码)

一、先简单布局

 

  • {{item}}

export default { computed: { pages() { return 10; } }};

登录后复制

效果如下:

使用Vue做出分页器(附代码)

有两个地方说下:

最前面和最后面两个icon用的font awesome的cdn

使用v-for来进行渲染的数据用的是计算属性里的pages,暂时写了一个数据11,所以渲染出了11个标签

二、理清思路,在这个例子里最重要

这篇文章的例子是参照了网易云音乐里的分页方法,网易的图:

使用Vue做出分页器(附代码)

它有几个特点:

首页和尾页一直都有

最多时候有11个标签页,包括两个 … ,但是它们不能点击,所以我也把例子里的页码设为11

在当前页变动的时候,页码的形态也会发生变化,总共有三种情况,这个下面会细说

分页的三种情况:

第一种:当前页码小于等于5的时候

如图:

使用Vue做出分页器(附代码)

这种情况首页尾页保留,倒数第二个页面为…, 页码从头往后算

第二种情况:当前页码处于最后5个的时候

如图:

使用Vue做出分页器(附代码)

首页和尾页依然保留,第二个页码为…,页码从最后向前算

第三种情况:页面处于较中间位置的时候

如图:

使用Vue做出分页器(附代码)

首页和尾页都保留,第二个页码和倒数第二个页码都为 … ,同时页面从当前页码位置向两侧算

三、用代码来实现上面的三种情况

从上面的思路来看,页码具体如何呈现由当前页码的位置决定,所以我们要在data里设置一个currentPage:1,而计算属性里用于渲染页码的pages通过currentPage来控制,同时还需要一个总页数totalPages:50。

先写第一种情况:

export default { data() {  return {   currentPage: 1,   totalPages: 50  } }, computed: {  pages() {   const c = this.currentPage   const t = this.totalPages   if (c <= 5) {    return [1, 2, 3, 4, 5, 6, 7, 8, 9, '...', t]   }  } }};

登录后复制

效果如下:

使用Vue做出分页器(附代码)

写第二种情况,再加个if:

export default { data() {  return {   currentPage: 47,   totalPages: 50  } }, computed: {  pages() {   const c = this.currentPage   const t = this.totalPages   if (c = t - 4) {    return [1, '...', t-8, t-7, t-6, t-5, t-4, t-3, t-2, t-1, t]   }  } }};

登录后复制

把currentPage的值设为>= 46,效果如下:

使用Vue做出分页器(附代码)

把第三种情况加上:

computed: {  pages() {   const c = this.currentPage   const t = this.totalPages   if (c = t - 4) {    return [1, '...', t-8, t-7, t-6, t-5, t-4, t-3, t-2, t-1, t] //第二种情况   } else {    return [1, '...', c-3, c-2, c-1, c, c+1, c+2, c+3, '...', t] //第三种情况   }  } }

登录后复制

基本就是这样,已经可以通过改变currentPage的值查看分页器的变化了。

接下来实现点击相应的页码来改变currentPage的值,只要写一个点击事件再写一个函数就好了。

  • ...methods: { select(item) { this.currentPage = item }}...actived: { border-color: #2d8cf0; background-color: #2d8cf0; color: #fff;}
  • 登录后复制

    效果如下:

    使用Vue做出分页器(附代码)

    为了让当前页码更清楚,再在页面上加上当前多少页

    当前第{{currentpage}}页

    登录后复制

    效果如下:

    使用Vue做出分页器(附代码)

    发现了一bug,就是我们每次点击的时候,都是将item的具体内容传递过去改变currentIPage的,但是当我们点的 … 的时候就把它也传递过去了,但是它不是我们要的页码的数据,在计算的时候就出错了,所以我们需要做一点处理。同时,还有再点击当前页码的时候也不必再执行select函数了。

    简单改写一下select函数:

    select(n) {  if (n === this.currentPage) return   if (typeof n === 'string') return   this.currentPage = n}

    登录后复制

    这样就正常了。

    再把两侧icon向前一页和向后一页的功能加上,因为一个是加1一个是减1,所以写一个函数传递不同的参数就行了。

  • ...
  • ...prevOrNext(n) { this.currentPage += n}

    登录后复制

    效果如下:

    使用Vue做出分页器(附代码)

    呃,边界问题,当currentPage为1时就不能再减了,当它为最大时也不能再加了。

    改写一下代码:

    prevOrNext (n) { this.currentPage += n this.currentPage  this.totalPages  ? this.currentPage = this.totalPages  : null}

    登录后复制

    这下就可以了,如图:

    使用Vue做出分页器(附代码)

    四、 结语

    写到这里,这个分页器基本功能就写完了,当然,我们还可以继续封装,在每次改变currentPage的时候用this.$emit通知外面实现通信,还可以通过props来向内传递数据,比如传递totalPages等,这些都是可以继续完善的内容。最重要的一点,关于分页器的具体计算方法,我用的是最笨的方法,所以同志们要是知道更好的办法记得留言啊~

    相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

    推荐阅读:

    如何使用JS实现前后端同构

    怎样使用Angular打开Font-Awesome

    立即学习“前端免费学习笔记(深入)”;

    以上就是使用Vue做出分页器(附代码)的详细内容,更多请关注【创想鸟】其它相关文章!

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

    发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2750815.html

    (0)
    上一篇 2025年3月8日 05:43:09
    下一篇 2025年2月26日 09:11:04

    AD推荐 黄金广告位招租... 更多推荐

    相关推荐

    • 如何做出node.js界面

      这次给大家带来如何做出node.js界面,做出node.js界面的注意事项有哪些,下面就是实战案例,一起来看一下。 最近要写一个工具界面整合项目的功能属性,方便其他部门的人进行编辑,有点类似后台。会有部分数据上的交互。于是学习了下node.…

      2025年3月8日
      200
    • 使用JS实做出加密解密操作

       这次给大家带来使用JS实做出加密解密操作,使用JS实做出加密解密操作的注意事项有哪些,下面就是实战案例,一起来看一下。 JavaScript实现对内容的加密和解密。加密,转成编码。解密则是编码转字符串。 JS加密解密 加密解密 // 加密…

      编程技术 2025年3月8日
      200
    • 怎样利用node做出可读流动模式

      这次给大家带来怎样利用node做出可读流动模式,利用node做出可读流动模式的注意事项有哪些,下面就是实战案例,一起来看一下。 node的可读流基于事件 可读流之流动模式,这种流动模式会有一个”开关”,每次当&#82…

      2025年3月8日
      200
    • 如何操作将配置数据从代码中分离

      这次给大家带来如何操作将配置数据从代码中分离,将配置数据从代码中分离的注意事项有哪些,下面就是实战案例,一起来看一下。 代码无非是定义一些指令的集合让计算机来执行。我们]常常将数据传入计算机,由指令对数据进行操作,并最终产生一个结果。当不得…

      编程技术 2025年3月8日
      200
    • 在vue里使用post请求(附代码)

      这次给大家带来在vue里使用post请求(附代码),在vue里使用post请求的注意事项有哪些,下面就是实战案例,一起来看一下。 vue开发过程中,总会碰到一些问题,当然任何问题都不能阻止我们前进的脚步,话不多说,下面是我在开发过程中请求参…

      编程技术 2025年3月8日
      200
    • JS+console[”]10种输出方法(附代码)

      这次给大家带来JS+console[”]10种输出方法(附代码),使用JS+console[”]10种输出方法的注意事项有哪些,下面就是实战案例,一起来看一下。 1、console.log是最常用的输入方法,正常化输…

      2025年3月8日 编程技术
      200
    • JS链式调用(附代码)

      这次给大家带来JS链式调用(附代码),使用JS链式调用的注意事项有哪些,下面就是实战案例,一起来看一下。 写过jquery的可能都知道,jquery里面可以很方便的使用以下代码: // 不使用链式调用const element = $(el…

      编程技术 2025年3月8日
      200
    • AngularJS与BootStrap模仿百度分页的方法

      这篇文章主要介绍了angularjs与bootstrap模仿百度分页的示例代码,分页在很多时候都能用到,现在分享给大家,也给大家做个参考。 模仿百度的每页显示10条数据, 实现了当前页居中的算法. nbsp;html>     Boo…

      2025年3月8日
      200
    • AngularJS 前台分页实现

      这篇文章主要介绍了关于angularjs 前台分页实现,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 分页思路 考评员查询,因为整体的数据量比较小,所以我们可以将分页放到前台进行处理。 其实分页的原理也很简单,我们根据分页选…

      2025年3月8日
      200
    • 如何用JavaScript避免代码的重复执行

      我喜欢到一些大型网站上去翻阅它们的原代码,期望能找到一些可以应用到自己的代码中的模式,或发现一些之前从未听说过的工具和技巧。可是,在我查看这些大型网站的源代码时,经常会发现一个问题,那就是重复的代码执行,重复的功能应用。下面就是一些在查看它…

      2025年3月7日
      200

    发表回复

    登录后才能评论