zoukankan      html  css  js  c++  java
  • 封装elementUI pagination 组件

    组件完整代码:

    <template>
      <div :class="{'hidden':hidden}" class="pagination-container">
        <el-pagination
          :background="background"
          :current-page.sync="currentPage"
          :page-size.sync="pageSize"
          :layout="layout"
          :page-sizes="pageSizes"
          :total="total"
          v-bind="$attrs"
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
        />
      </div>
    </template>
    
    <script>
    import { scrollTo } from '@/utils/scroll-to'
    
    export default {
      name: 'Pagination',
      props: {
        total: {
          required: true,
          type: Number
        },
        page: {
          type: Number,
          default: 1
        },
        limit: {
          type: Number,
          default: 20
        },
        pageSizes: {
          type: Array,
          default() {
            return [10, 20, 30, 50]
          }
        },
        layout: {
          type: String,
          default: 'total, sizes, prev, pager, next, jumper'
        },
        background: {
          type: Boolean,
          default: true
        },
        autoScroll: {
          type: Boolean,
          default: true
        },
        hidden: {
          type: Boolean,
          default: false
        }
      },
      computed: {
        currentPage: {
          get() {
            return this.page
          },
          set(val) {
            this.$emit('update:page', val)
          }
        },
        pageSize: {
          get() {
            return this.limit
          },
          set(val) {
            this.$emit('update:limit', val)
          }
        }
      },
      methods: {
        handleSizeChange(val) {
          this.$emit('pagination', { page: this.currentPage, limit: val })
          if (this.autoScroll) {
            scrollTo(0, 800)
          }
        },
        handleCurrentChange(val) {
          this.$emit('pagination', { page: val, limit: this.pageSize })
          if (this.autoScroll) {
            scrollTo(0, 800)
          }
        }
      }
    }
    </script>
    
    <style scoped>
    .pagination-container {
      background: #fff;
      padding: 32px 16px;
    }
    .pagination-container.hidden {
      display: none;
    }
    </style>
    View Code
    scrollTo 方法是在页码切换时让页面滚动条回到顶部,代码如下:
    Math.easeInOutQuad = function(t, b, c, d) {
        t /= d / 2
        if (t < 1) {
          return c / 2 * t * t + b
        }
        t--
        return -c / 2 * (t * (t - 2) - 1) + b
      }
      
      // requestAnimationFrame for Smart Animating http://goo.gl/sx5sts
      var requestAnimFrame = (function() {
        return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) }
      })()
      
      /**
       * 检测到滚动元素,只要移动它们就行了
       * @param {number} amount
       */
      function move(amount) {
        document.documentElement.scrollTop = amount
        document.body.parentNode.scrollTop = amount
        document.body.scrollTop = amount
      }
      
      function position() {
        return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop
      }
      
      /**
       * @param {number} to
       * @param {number} duration
       * @param {Function} callback
       */
      export function scrollTo(to, duration, callback) {
        const start = position()
        const change = to - start
        const increment = 20
        let currentTime = 0
        duration = (typeof (duration) === 'undefined') ? 500 : duration
        var animateScroll = function() {
          // 增加时间
          currentTime += increment
          // 用二次输入输出函数求值
          var val = Math.easeInOutQuad(currentTime, start, change, duration)
          // 执行滚动行为
          move(val)
          // 执行动画,直到滚动行为结束
          if (currentTime < duration) {
            requestAnimFrame(animateScroll)
          } else {
            if (callback && typeof (callback) === 'function') {
              // 动画结束后的回调函数
              callback()
            }
          }
        }
        animateScroll()
      }
      
    View Code

    使用组件:

    <pagination
          v-show="total>0"
          :total="total"
          :page.sync="queryParams.pageNum"
          :limit.sync="queryParams.pageSize"
          @pagination="getList"
        />

    由于分页组件使用频繁,可以直接作为全局组件引入。

  • 相关阅读:
    jmeter测试get post 笔记
    Fiddler发送get post测试 笔记
    jmeter json乱码
    IDEA+selenium3+火狐/谷歌驱动 JAVA初步环境搭建 笔记
    java源代码
    java测试
    考试感受
    周进度总结
    周进度总结
    周进度总结
  • 原文地址:https://www.cnblogs.com/jervy/p/14215422.html
Copyright © 2011-2022 走看看