zoukankan      html  css  js  c++  java
  • vue 分页 pagination

    <template>
      <div class="pagination_box">
        <div class="pagination_wrap">
          <ul class="clearfix">
    
            <!-- prev -->
            <li class="first btn" :class="{'disabled': current === 1}" @click="setCurrent(current - 1)">
              <a href="javascript:;"><em></em></a>
            </li>
    
            <!-- 页数列表 -->
            <li v-for="(item, index) in grouplist" :key="index">
              <a href="javascript:;" @click="setCurrent(item.val)" :class="{'active': current == item.val}">{{item.text}}</a>
            </li>
    
            <!-- next -->
            <li class="last btn" :class="{'disabled': current === page}" @click="setCurrent(current + 1)">
              <a href="javascript:;"><em></em></a>
            </li>
    
          </ul>
        </div>
      </div>
    </template>
    
    <script>
      export default {
        name: 'pagination',
        props: {
          // 当前页码
          currentPage: {
            type: Number,
            default: 1
          },
          // 每页显示条数
          display: {
            type: Number,
            default: 10
          },
          // 总页数
          total: {
            type: Number,
            default: 0
          },
          // 分页条数
          pagegroup: {
            type: Number,
            default: 5,
            coerce: function (v) {
              v = v > 0 ? v : 5;
              return v % 2 === 1 ? v : v + 1;
            }
          }
        },
        data() {
          return {
            pages: null
          }
        },
        computed: {
          /**
           * 返回当前页码
           */
          current() {
            return this.currentPage
          },
          /**
           * 显示总页数
           */
          page() {
            return Math.ceil(this.total / this.display)
          },
          /**
           * 获取分页页码
           */
          grouplist() {
            var len = this.page,
              temp = [],
              list = [],
              count = Math.floor(this.pagegroup / 2),
              center = this.current;
            if (len <= this.pagegroup) {
              while (len--) {
                temp.push({
                  text: this.page - len,
                  val: this.page - len
                });
              };
              return temp;
            }
            while (len--) {
              temp.push(this.page - len);
            };
            var idx = temp.indexOf(center);
            (idx < count) && (center = center + count - idx);
            (this.current > this.page - count) && (center = this.page - count);
            temp = temp.splice(center - count - 1, this.pagegroup);
            do {
              var t = temp.shift();
              list.push({
                text: t,
                val: t
              });
            } while (temp.length);
            if (this.page > this.pagegroup) {
              (this.current > count + 1) && list.unshift({
                text: '...',
                val: list[0].val - 1
              });
              (this.current < this.page - count) && list.push({
                text: '...',
                val: list[list.length - 1].val + 1
              });
            }
            return list;
          }
        },
        methods: {
          /**
           * 设置当前页
           * @param {String} num  // 当前页数
           */
          setCurrent(num) {
            let idx = parseFloat(num)
            // 如果是点击当前页, 当前页面大于0, 小于总页数
            if (this.current !== idx && idx > 0 && idx < this.page + 1) {
              this.$emit("change", idx)
              this.pages = null
            }
          }
        },
      }
    </script>
    <style lang="stylus">
      .pagination_box {
      padding: 0 10px;
      media-style('padding', (0 10px) (0 20px) (0 20px) (0 30px));
      text-align: right;
    
      .pagination_wrap {
        display: inline-block;
        padding: 10px 0;
    
        media-style('padding', (10px 0) (12px 0) (16px 0) (22px 0));
    
        ul {
          li {
            float: left;
            position: relative;
             24px;
            height: 24px;
            margin: 0 1px;
            media-style('margin', (0 2px) (0 4px) (0 4px) (0 6px))
    
            a {
              display: block;
              font-size: 12px;
              text-align: center;
              line-height: 24px;
              position: relative;
              border: 1px solid transparent;
              color: #000000;
              transition();
    
              &:hover,
              &.active {
                color: $base-button-background;
                border-color: $base-button-background;
              }
            }
    
            &.btn {
              a {
                height: 100%;
    
                &:hover {
                  em {
                    background: $base-button-background;
                  }
                }
    
                em {
                  position: absolute;
                  left: 50%;
                  top: 50%;
                   6px;
                  height: 6px;
                  background: #000000;
                  transition();
    
                  &:after {
                    content: '';
                    position: absolute;
                    left: 50%;
                    top: 50%;
                     6px;
                    height: 6px;
                    margin: -4px 0 0 -2px;
                    background: #ffffff;
                    transform: rotate(0deg);
                  }
                }
              }
            }
    
            &.first {
              em {
                margin: -3px 0 0 -2px;
                transform: rotate(45deg);
              }
            }
    
            &.last {
              em {
                margin: -3px 0 0 -4px;
                transform: rotate(225deg);
              }
            }
    
            &.btn.disabled {
              em {
                background: #C1C6CD;
              }
    
              a {
                &:hover {
                  color: #C1C6CD;
                  border-color: transparent;
    
                  em {
                    background: #C1C6CD;
                  }
                }
              }
            }
          }
    
        }
    
      }
    }
    </style>
    

      

  • 相关阅读:
    Java总结(三)之String、StringBuffer、StringBuilder区别
    Java总结(二)之字符串常用操作
    Java总结(一)之四类八种数据类型
    schema.xml的配置
    MySQL server has gone away问题得解决方案
    如何在Java中将Excel转化为XML格式文件
    FileItemFactory 接口的介绍
    小练习2
    小练习
    while else 练习题
  • 原文地址:https://www.cnblogs.com/alantao/p/12523949.html
Copyright © 2011-2022 走看看