基于vue实现分页/翻页组件paginator示例


Posted in Javascript onMarch 09, 2017

序言

项目需要自己写了一个基于vue的paginator分享出来,欢迎各路好汉来指教

当页数小于999(包括999)页

基于vue实现分页/翻页组件paginator示例

页数大于999页

基于vue实现分页/翻页组件paginator示例

首页或尾页disabled

基于vue实现分页/翻页组件paginator示例

10页之内显示

基于vue实现分页/翻页组件paginator示例

Usage

参数

pageCount: 整数,代表总页数

监听事件

@togglePage: 监听切换页面事件,可以获取到当前前往页的页数

父组件调用方法 index.vue

<template lang="html">
  <div>
    <paginator :pageCount="pageCount" @togglePage="togglePage($event)"></paginator>
  </div>
</template>

<script>
export default {
  data(){
    return{
      //总页数
      pageCount: 24
    }
  },
  methods:{
    togglePage(indexPage){
      //打印出当前页数
      console.log(indexPage);
    },
  }
}
</script>

分页组件 paginator.vue

<template lang="html">
  <div class="pagination">
    <ul>
      <li :class="{disabled: curPage == 1}" @click="prevPage" v-if="pageCount > 1">上一页</li>
      <li :class="{active: curPage == 1}" @click="page(1)">1</li>
      <li class="ellipsis" v-show="curPage > 5 && pageCount > 10">...</li>
      <li :class="{active: curPage == index+offset}" v-for="(item,index) in middlePages" @click="page(index+offset)">{{index+offset}}</li>
      <li class="ellipsis" v-show="curPage < bigLimit && pageCount > 10">...</li>
      <li :class="{active: curPage == pageCount}" @click="page(pageCount)" v-if="pageCount > 1">{{pageCount}}</li>
      <li :class="{disabled: curPage == pageCount}" @click="nextPage" v-if="pageCount > 1">下一页</li>
    </ul>
  </div>
</template>

<script>
  export default {
    props:['pageCount'],
    data(){
      return {
        curPage: 1,
      };
    },
    computed:{
      middlePages(){
        if(this.pageCount <= 2){
          return 0;
        }else if(this.pageCount> 2 && this.pageCount <= 10){
          return this.pageCount-2;
        }else{
          return this.curPage > 999 ? 5 : 8;
        }
      },
      bigLimit(){
        return this.middlePages > 5 ? this.pageCount-6 : this.pageCount -3;
      },
      offset(){
        if(this.curPage <= 5){
          return 2;
        }else if(this.curPage >= this.bigLimit){
          return this.bigLimit-2;
        }else{
          return this.middlePages > 5 ? this.curPage-3 : this.curPage-2;
        }
      }
    },
    methods:{
      page(indexPage){
        this.$emit('togglePage',indexPage);
        this.curPage = indexPage;
      },
      prevPage(){
        if(this.curPage != 1){
          this.page(this.curPage-1);
        }
      },
      nextPage(){
        if(this.curPage != this.pageCount){
          this.page(this.curPage+1);
        }
      }
    }
  };
</script>

<style lang="css" scoped>
  @import 'styles/vars.css';
  .pagination{
    width: 660px;
    text-align: center;
    ul{
      margin: 40px 0 60px 0;
      li{
        cursor: pointer;
        display: inline-block;
        padding: 5px 9px;
        border: 1px solid #e1e1eb;
        margin-right: 5px;
        &.active{
          background: #4078c0;
          color: #fff;
        }
        &.ellipsis{
          border: none;
        }
        &.disabled{
          color: #dcdcdc;
        }
      }
    }
  }
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
juqery 学习之三 选择器 子元素与表单
Nov 25 Javascript
javascript (用setTimeout而非setInterval)
Dec 28 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
Oct 11 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
Nov 25 Javascript
JS弹出层单纯的绝对定位居中示例代码
Feb 18 Javascript
js模拟hashtable的简单实例
Mar 06 Javascript
JavaScript通过prototype给对象定义属性用法实例
Mar 23 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
Oct 22 Javascript
基于vue的短信验证码倒计时demo
Sep 13 Javascript
JavaScript满天星导航栏实现方法
Mar 08 Javascript
Vue路由守卫之路由独享守卫
Sep 25 Javascript
Vue 一键清空表单的实现方法
Feb 07 Javascript
vue.js利用Object.defineProperty实现双向绑定
Mar 09 #Javascript
javascript遍历json对象的key和任意js对象属性实例
Mar 09 #Javascript
微信小程序 五星评价功能的实现
Mar 09 #Javascript
javascript实现数据双向绑定的三种方式小结
Mar 09 #Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
Mar 09 #Javascript
Vue监听数据对象变化源码
Mar 09 #Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
Mar 09 #Javascript
You might like
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
处理单名多值表单的详解
2013/06/08 PHP
PHP cdata 处理(详细介绍)
2013/07/05 PHP
分享PHP守护进程类
2015/12/30 PHP
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
引用其它js时如何同时处理多个window.onload事件
2014/09/02 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
angular6.0开发教程之如何安装angular6.0框架
2018/06/29 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
python获取各操作系统硬件信息的方法
2015/06/03 Python
python如何统计序列中元素
2020/07/31 Python
python事件驱动event实现详解
2018/11/21 Python
python3.6中@property装饰器的使用方法示例
2019/08/17 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
浅谈django 模型类使用save()方法的好处与注意事项
2020/03/28 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
HMV日本官网:全球知名的音乐、DVD和电脑游戏零售巨头
2016/08/13 全球购物
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
Jar包的作用是什么
2014/03/30 面试题
建筑专业毕业生推荐信
2013/11/21 职场文书
幼儿园保育员辞职信
2014/01/12 职场文书
一帮一活动总结
2014/05/08 职场文书
感恩老师主题班会
2015/08/12 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL