基于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 相关文章推荐
jQuery 复合选择器应用的几个例子
Sep 11 Javascript
Javascript添加监听与删除监听用法详解
Dec 19 Javascript
基于javascript实现简单的抽奖系统
Apr 15 Javascript
全面解析Bootstrap中nav、collapse的使用方法
May 22 Javascript
jQuery的事件预绑定
Dec 05 Javascript
jQuery编写设置和获取颜色的插件
Jan 09 Javascript
分析JavaScript数组操作难点
Dec 18 Javascript
微信小程序 如何引入外部字体库iconfont的图标
Jan 31 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
Jun 06 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
Apr 11 Javascript
JS使用cookie保存用户登录信息操作示例
May 30 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
Dec 02 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
php 数组元素快速去重
2017/05/05 PHP
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
潜说js对象和数组
2011/05/25 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
Js Jquery创建一个弹出层可加载一个页面
2014/05/08 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
2015/09/25 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
webpack多页面开发实践
2017/12/18 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
Python迭代器和生成器介绍
2015/03/06 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
numpy库reshape用法详解
2020/04/19 Python
python 实现波浪滤镜特效
2020/12/02 Python
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
结构和类有什么异同
2012/07/16 面试题
法律专业学生的自我评价
2014/02/07 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
护士医德医风心得体会
2016/01/25 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
导游词之五台山
2019/10/11 职场文书
javascript的setTimeout()使用方法总结
2021/11/20 Javascript
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL